我通过模块在我的应用程序中手动设置Ninject(v3)绑定:
public class FooBarModule : NinjectModule
{
public override void Load()
{
Kernel.Bind<IFooBar>().To<FooBarOne>().InSingletonScope();
Kernel.Bind<IFooBar>().To<FooBarTwo>().InSingletonScope();
}
}
现在,我系统中的一些类实现了接口IBoostrapable
:
public class FooBarOne : IFooBar, IBootstrapable
{ ... }
我想自动扩展实现此接口的类的Ninject绑定。
所以,最后我希望能够做到:
var fooBars = Kernel.GetAll<IFooBar>();
var bootstrapbables = Kernel.GetAll<IBootstrapable>();
fooBars.Count().Should().Be(2); // Instance of FooBarOne and FooBarTwo
bootstrapbables.Count().Should().Be(1); // instance of FooBarOne
重要的是,我实际上扩展了现有的绑定(因此保留了singelton范围。
这可以用扩展点以某种方式完成吗?
此致
多米尼克
答案 0 :(得分:2)
您可以使用约定。 E.g。
kernel.Bind(x => x
.FromThisAssembly()
.SelectAllClasses()
.InheritedFrom<IFooBar>()
.BindAllInterfaces()
.Configure(c => c.InSingletonScope());