【问题标题】:How to chain NInject modules together如何将 NInject 模块链接在一起
【发布时间】:2013-01-25 16:06:13
【问题描述】:

我有一个使用 NInject 来解决依赖注入的多层应用程序。每层都有一个特定的 NInject 模块:

服务层 - ServiceModule 数据层 - 数据模块

在我的表示层中,我真的不想加载每个模块。而不是我想要的,例如,加载 ServiceModule 并且模块负责加载其依赖项。

我怎样才能做到这一点?

例如这里是我的 ServiceModule:

public class ServicesModule : NinjectModule
{
    public override void Load()
    {
        ...
        Bind<IProductService>().To<ProductService>();
        ...
    }
}

【问题讨论】:

    标签: c# asp.net dependency-injection ninject


    【解决方案1】:

    很简单,在 NInject 模块中可以访问内核:

    Kernel.Load(new [] { new [YourModule]() });
    

    【讨论】:

    • 如果您通过添加using Ninject; 来引入Ninject 命名空间,您还将获得一个扩展方法,该方法提供了一个Kernel.Load 方法,这使得它变得更加容易......Kernel.Load(params INinjectModule[] modules);
    • 当模块层次结构中存在共享模块时,是否有一种非自定义方法可以避免多个模块初始化?假设我有依赖于模块C 的模块A 和依赖于模块C 的模块B。如果我在AB 中都调用Kernel.Load(C),Ninject 会冲我大喊,说模块C 已经初始化。
    【解决方案2】:

    如果你的模块有一个依赖的模块,你可以从那个模块继承(而不是NinjectModule)并调用base.Load()

    public override void Load()
    {
        base.Load();
        ...
    }
    

    这将有效地链接模块。

    【讨论】:

    • 虽然我对 Ninject 还不是很熟悉,但继承通常意味着一个 is Relation。 OP 想要的是一个从 ServiceModuleDataModule关联
    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多