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

NInject: Bind Multiple Services to Single Interface

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

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 项服务。

请帮忙!

问题已解决。

问题在于,插件库是在服务注册后通过自定义程序集解析器加载的。所以我们将内核公开为静态 属性 并在加载后执行其服务的注册。

下一个问题是 'binding' 无法为 1 个接口注册 2 个插件。 它通过遍历每个插件类型并获取它们的接口并按如下方式注册来解决:

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