我有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项服务。
请帮忙!
答案 0 :(得分:1)
问题已解决。
问题在于,插件库是在注册服务后通过自定义程序集解析程序加载的。因此,我们将Kernel作为静态属性公开,并在加载后对其服务进行了注册。
下一个问题是'绑定'无法在1个接口上注册2个插件。 它通过遍历每个插件类型并获取其接口并注册如下来解决:
foreach (var interfaceType in pluginServiceType.GetInterfaces())
kernel.bind(interfaceType).to(pluginServiceType)