NInject能否按需加载模块/程序集?

6

NInject中是否有类似Unity的功能,可以按需从其他模块(程序集)中加载服务?


我认为我不理解你的意思。您如何在Unity中“从其他程序集加载服务”? - Konamiman
3个回答

13

我相信这就是你要找的:

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());
    }
}

3

我不太理解你所说的“像Unity”,但你可以采取几种不同的方法来加载程序集。默认情况下,Ninject本身将加载本地程序集以进行扩展/插件。Ninject还可以从程序集中加载NinjectModule类。如果你想做更复杂的事情,可以使用Ninject.Extensions.Conventions项目进行各种扫描和类型绑定。


请问您能否提供更多关于如何使Ninject“从程序集中加载NinjectModule类”的细节呢? Ninject的维基覆盖了相当基础的内容。 - Piotr Owsiak
好的,我现在明白了,我在项目中混淆了Ninject版本。 - Piotr Owsiak
提供的 GitHub 链接已失效。实际链接是 https://github.com/ninject/Ninject.Extensions.Conventions。 - realsonic
@realsonic 谢谢。已更新。 - Ian Davis

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接