很多的DI框架中,XML映射文件会快速的增加,而不容易导航。在Ninject中,类型绑定被集中到模块中。每一个模块代表应用程序中的一个独立片段存在。它们可以以你喜欢的方式组织起来。模块只需实现IModule接口,但大多数模块只需简单的从标准模块(StandardModule)派生即可。
例:
public class WarriorModule : StandardModule
{
public override void Load()
{
Bind<IWeapon>().To<Sword>();
Bind<Samurai>().ToSelf();
}
}
一旦创建了模块。就可以把这些对象收集到一个叫内核(kernel)的容器中。可以从字面上理解,这个内核是应用程序的核心。调用内核的Get()方法就可以得到一种类型的实例。
以下一个例子来阐述如何创建一个内核,然后激活它和通过它来创建一个类型实例。
例:
IKernel _kernel = new StandardKernel(new WarriorModule());
Samurai sam = _kernel.Get<Samurai>();
sam.Attack("僵尸");
调用Get()方法的结果就是为武士装备了一把剑。因此,调用武士的Attack()方法的结果和以前的结果相同。
可以创建许多模块,然后把它们传到内核的构造器中。
public class Modul_2 : StandardModule
{
……
}
……
同样的,要记得模块在应用程序中和其它代码以同样的方式执行。不它不只是限于死绑,可以加上其它的语句,
例:
public override void Load()
{
if (true)
{
Bind<IWeapon>().To<Sword>();
}
else
{
Bind<IWeapon>().To<Shuriken>();
}
Bind<Samurai>().ToSelf();
}
参考原文:http://ninject.codeplex.com/wikipage?title=Modules%20and%20the%20Kernel&referringTitle=User%20Guide