摘要
随着应用程序的增长,注册的服务列表跟着变长,管理这个列表将变得困难。Ninject模块是一个好的将我们的类型绑定分离到不同的绑定组的方式,它很容易地将分组组织到不同的文件中。将一个类变成一个Ninject模块只需要将这个类继承INinjectModule接口。每次创建一个Module的时候都需要实现这个接口,需要实现三个方法和两个属性。创建一个抽象类实现这个接口,之后每次创建Ninject模块的时候都继承这个抽象类,这是一个好主意。好消息是Ninject已经有一个这样的抽象类,名称是NinjectModule。
下面是一个NinjectModule例子:
1 public class MailServiceModule : NinjectModule 2 { 3 public override void Load() 4 { 5 Bind<ILogger>().To<ConsoleLogger>().InSingletonScope(); 6 Bind<MailServerConfig>().ToSelf().InRequestScope(); 7 } 8 }
定义了模块之后,我们需要将他们加载到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的公有类,加载他们的类型绑定。
作者:丹尼大叔
出处:http://www.cnblogs.com/uncle_danny
本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。