Ninject绑定,接口到接口

Not*_*ple 2 c# binding dependency-injection ninject

我想做一些类似的事情:

kernel.Bind<IBootTaskA>().To<BootTaskA>().InSingletonScope();
kernel.Bind<IBootTaskB>().To<BootTaskB>().InSingletonScope();

kernel.Bind<IBootTask>().To<IBootTaskA>();
kernel.Bind<IBootTask>().To<IBootTaskB>();
Run Code Online (Sandbox Code Playgroud)

所以我可以这样做:

public class Boot
{
     public Boot(IBootTask[] bootTasks)
     {
          foreach(var task in bootTasks){task.Execute();}
     }
}
Run Code Online (Sandbox Code Playgroud)

但我似乎无法将接口绑定到接口,有人知道解决方法吗?

Not*_*ple 5

这是您的操作方式。

public class Service : IServiceA, IServiceB {}

this.Bind<Service>().ToSelf().InSingletonScope();
kernel.BindInterfaceToBinding<IServiceA, Service>();
kernel.BindInterfaceToBinding<IServiceB, Service>();
Run Code Online (Sandbox Code Playgroud)

ninject扩展可满足您的需求。

https://github.com/ninject/ninject.extensions.contextpreservation/wiki/Bind-Interface-to-Binding

编辑:

在ninject 3中,这稍微容易一些,您不再需要上下文保存,只需:

Bind<IServiceA,IServiceB>().To<Service>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)