NInject可以按需加载模块/组件吗?

时间:2009-11-07 22:20:29

标签: assemblies inversion-of-control ninject

NInject中是否有设施允许我按需在其他模块(程序集)中加载服务,就像在Unity中完成一样?

3 个答案:

答案 0 :(得分:12)

我很确定这就是你要找的东西:

var kernel = new StandardKernel();
kernel.Load( Assembly.Load("yourpath_to_assembly.dll");

如果你在Ninject.dll中查看带有反射器的KernelBase,你会发现这个调用将递归加载已加载程序集中的所有模块(Load方法需要一个IEnumerable)

public void Load(IEnumerable<Assembly> assemblies)
{
    foreach (Assembly assembly in assemblies)
    {
        this.Load(assembly.GetNinjectModules());
    }
}

答案 1 :(得分:3)

我不太明白“Like Unity”的意思,但你可以为装载程序集做一些不同的事情。 Ninject本身将默认加载扩展/插件的本地程序集。 Ninject还可以从程序集中加载NinjectModule类。如果您想要做一些更复杂的事情,可以使用Ninject.Extensions.Conventions项目进行大量不同的扫描和类型绑定。

答案 2 :(得分:0)

如果您指的是开箱即​​用非静态加载程序集,则不然。

还有许多其他问题,例如Using Ninject in a plugin like architecture