c# - 使用 Ninject 查找实现通用接口(interface)的类

标签 c# ninject ninject.web.mvc

使用 Ninject,您可以像这样注册绑定(bind):

Bind(typeof(IQueryHandler<,>)).To(typeof(QueryHandler<,>));

但就我而言,我不知道实际类的名称。我所知道的是它实现了某个接口(interface)。

例如,假设我有以下内容:

public class CreatePageQueryHandler : IQueryHandler<CreatePage, string>
{
    public string Retrieve(CreatePage query)
    { ... }
}

只有一个类使用这些通用参数实现接口(interface):IQueryHandler<CreatePage, string>

Ninject 有没有办法动态获取类的实例?像这样的东西:

kernel.Get<IQueryHandler<CreatePage, string>>(); // returns instance of: CreatePageQueryHandler 

请注意:

我不想手动bind这在 RegisterServices方法。我正在寻找一种动态方式来获取类的实例。

最佳答案

Ninject 包含批量注册 API。例如,您可以使用以下绑定(bind):

kernel.Bind(
    x => x.FromAssembliesMatching("Fully.Qualified.AssemblyName*")
    .SelectAllClasses()
    .InheritedFrom(typeof(IQueryHandler<,>))
    .BindBase()
);

关于c# - 使用 Ninject 查找实现通用接口(interface)的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45323427/

相关文章:

c# - 在 Visual Studio C# 项目中,文件是否知道其他文件内容而无需使用 using 语句?

c# - MVC3 中的 Ninject 依赖注入(inject) - 在 Controller 之外

c# - 安全地对IoC/DI配置进行广泛的更改

asp.net-mvc - Ninject 绑定(bind)可以基于 URL/路由值吗?

asp.net-mvc-5 - 使用带有多个构造函数参数的绑定(bind)时,序列包含多个元素错误

asp.net-mvc - 如何使用 Ninject 使用 Identity 2 中的默认身份模型将用户管理器注入(inject)到帐户 Controller

c# - .NET Windows 服务是否需要调用 ServiceBase.Run()

c# - 获取类c#的路径

c# - 使用 C# 读取 azure ServiceConfiguration 文件的证书部分

dependency-injection - 忍者: Constructor parameter