使用NInject可以很容易地通过接口建立依赖注入。
例如说我有一个像
的类public class WindowManagerService : IWindowManager
{
public WindowManagerService(ILogger logger) { }
}
做这样的事情很容易:
public class NinjectModuleLoader : NinjectModule
{
public override void Load()
{
this.Bind<IWindowManager>().To<WindowManagerService>().InSingletonScope();
}
}
并成功配置依赖项注入。
但是我遇到的问题是,当我需要向构造函数中提供类的具体实例时,例如以下示例:
public class ObservableLogger : ILogger
{
public ObservableLogger(Dispatcher dispatcher) { }
}
在上面的示例中,我需要能够传递调度程序的具体实现,因为我无法使用DI来建立此链接,并且必须引用整个应用程序的Dispatcher
实例。
基本上,我希望能够做的是这样的事情:
this.Bind<ILogger>().To(new ObservableLogger(Dispatcher)).InSingletonScope();
那么如何为NInject依赖管理器提供依赖的具体实现?
答案 0 :(得分:1)
您可以使用工厂方法:
this.Bind<ILogger>().ToMethod(context => new ObservableLogger(Dispatcher));
...或按照文档中的说明创建自己的自定义提供程序:https://github.com/ninject/Ninject/wiki/Providers,-Factory-Methods-and-the-Activation-Context
还有ToConstant
和ToConstructor
方法:
this.Bind<ILogger>().ToConstant(new ObservableLogger(Dispatcher));
有关更多信息,请参阅this blog post。