使用 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/