NInject:将多个服务绑定到单个接口

时间:2017-12-14 16:31:52

标签: c# ninject

我有2个实现Foo1和Foo2的接口IFoo。

public interface IFoo
{
    void Process();
}

public class Foo1 : IFoo 
{
    public void Process()
    {
    }
}

public class Foo2 : IFoo
{
    public void Process()
    {
    }
}

我正在注册它们,如下所示。

kernel.Bind(x => x
                .FromAssemblyContaining<IFoo>()
                .SelectAllClasses().InheritedFrom<IFoo>()
                .BindAllInterfaces()
                .Configure(b => b.InRequestScope()));

我正试图获得所有这样的IFoo服务

public class TestController: ApiController
{
    public TestController(IFoo[] fooServices)
    {

    }
}

但是服务列表fooServices是空的。我希望得到我所有的2项服务。

请帮忙!

1 个答案:

答案 0 :(得分:1)

问题已解决。

问题在于,插件库是在注册服务后通过自定义程序集解析程序加载的。因此,我们将Kernel作为静态属性公开,并在加载后对其服务进行了注册。

下一个问题是'绑定'无法在1个接口上注册2个插件。 它通过遍历每个插件类型并获取其接口并注册如下来解决:

foreach (var interfaceType in pluginServiceType.GetInterfaces())
   kernel.bind(interfaceType).to(pluginServiceType)