将具体实例注入Ninject解析器

时间:2018-07-18 07:20:49

标签: c# wpf dependency-injection ninject ninject-extensions

使用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依赖管理器提供依赖的具体实现?

1 个答案:

答案 0 :(得分:1)

您可以使用工厂方法:

this.Bind<ILogger>().ToMethod(context => new ObservableLogger(Dispatcher));

...或按照文档中的说明创建自己的自定义提供程序:https://github.com/ninject/Ninject/wiki/Providers,-Factory-Methods-and-the-Activation-Context

还有ToConstantToConstructor方法:

this.Bind<ILogger>().ToConstant(new ObservableLogger(Dispatcher));

有关更多信息,请参阅this blog post