代码之家  ›  专栏  ›  技术社区  ›  Maxim Gershkovich

向Ninject解析器中注入具体实例

  •  1
  • Maxim Gershkovich  · 技术社区  · 6 年前

    使用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 回复  |  直到 6 年前
        1
  •  1
  •   mm8    6 年前

    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