使用Ninject,您可以注册如下绑定:

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


但就我而言,我不知道实际班级的名称。我所知道的是它实现了特定的接口。

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

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


只有一个类可以实现这些具有老年特征的接口:IQueryHandler<CreatePage, string>

Ninject有没有办法动态获取类的实例?就像是:

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




请注意:

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

最佳答案

Ninject包含一个批次注册API。例如,您可以使用以下绑定:

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

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

10-08 22:47