Ninject之旅之四:Ninject模块

摘要

随着应用程序的增长,注册的服务列表跟着变长,管理这个列表将变得困难。Ninject模块是一个好的将我们的类型绑定分离到不同的绑定组的方式,它很容易地将分组组织到不同的文件中。将一个类变成一个Ninject模块只需要将这个类继承INinjectModule接口。每次创建一个Module的时候都需要实现这个接口,需要实现三个方法和两个属性。创建一个抽象类实现这个接口,之后每次创建Ninject模块的时候都继承这个抽象类,这是一个好主意。好消息是Ninject已经有一个这样的抽象类,名称是NinjectModule。

下面是一个NinjectModule例子:

     public class MailServiceModule : NinjectModule
{
public override void Load()
{
Bind<ILogger>().To<ConsoleLogger>().InSingletonScope();
Bind<MailServerConfig>().ToSelf().InRequestScope();
}
}

定义了模块之后,我们需要将他们加载到kernel,Ninject才能够正确使用他们得到正确的注册类型。在测试类中添加测试函数:

        [Test]
public void NinjectModuleTest()
{
using (var kernel = new StandardKernel(new MailServiceModule()))
{
var mailService = kernel.Get<MailService>();
mailService.SendMail("your email address", "test email", "it is a test Email");
}
}

下面的代码将许多的模块加载到单个Ninject Kernel中:

var kernel = new StandardKernel(newModule1(), newModule2(), … );

我们也可以将一个应用程序中所有的模块同时加载到Ninject Kernel中:

kernel.Load(AppDomain.CurrentDomain.GetAssemblies());

这里,Ninject在所有的assembly中查找继承INinjectModule的公有类,加载他们的类型绑定。

上一篇:Echarts 3.19 制作常用的图形 非静态


下一篇:R自动数据收集第二章HTML笔记1(主要关于handler处理器函数和帮助文档所有示例)