C# 如何将NInject模块链接在一起

C# 如何将NInject模块链接在一起,c#,asp.net,dependency-injection,ninject,C#,Asp.net,Dependency Injection,Ninject,我有一个多层应用程序,使用NInject解决依赖注入问题。每一层都有一个特定的NInject模块: Service Layer - ServiceModule DataLayer - DataModule 服务层-服务模块 数据层-数据模块 在我的演示层,我真的不想加载每个模块。我不想这样,例如,加载ServiceModule,该模块负责加载其依赖项 我怎样才能做到这一点 例如,下面是我的ServiceModule: public class ServicesModule : NinjectMo

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

Service Layer - ServiceModule DataLayer - DataModule 服务层-服务模块 数据层-数据模块 在我的演示层,我真的不想加载每个模块。我不想这样,例如,加载ServiceModule,该模块负责加载其依赖项

我怎样才能做到这一点

例如,下面是我的ServiceModule:

public class ServicesModule : NinjectModule
{
    public override void Load()
    {
        ...
        Bind<IProductService>().To<ProductService>();
        ...
    }
}
公共类服务模块:ninject模块
{
公共覆盖无效负载()
{
...
绑定()到();
...
}
}

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

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

如果您的模块有它所依赖的单个模块,则可以从该模块继承(而不是从
NinjectModule
)并调用
base.Load()


这将有效地链接模块。

如果通过使用Ninject添加
,引入Ninject名称空间
您还将得到一个扩展方法,该方法提供了一个
内核.Load
方法,使它变得更加简单<代码>Kernel.Load(参数injectmodule[]modules)。当模块层次结构中存在共享模块时,是否有非自定义方法避免多个模块初始化?假设模块
A
依赖于模块
C
,模块
B
依赖于模块
C
。如果我在
A
B
中调用
Kernel.Load(C)
,Ninject会对我大喊大叫,说模块C已经初始化了。尽管我对Ninject还不太熟悉,但继承通常意味着一种is关系。OP想要的是从
ServiceModule
DataModule
public override void Load()
{
    base.Load();
    ...
}