码迷,mamicode.com
首页 > 其他好文 > 详细

Ninject之旅之五:Ninject XML配置

时间:2016-09-28 22:54:02      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:

摘要

使用XML配置,需要添加Ninject XML扩展的引用。下一步是添加一个或多个包含类型注册的XML文件。记得这些文件应该跟应用程序一起发布。因此不要忘记将XML文件的属性设置成“Copy if newer”。

 

XML配置文件像下面的配置一样:

<module name="moduleName">
  <bind service="Namespace.IService1, AssemblyName"
    to="Namespace.ConcreteService1, AssemblyName" />
  <bind service="Namespace.IService2, AssemblyName"
    to="Namespace.ConcreteService2, AssemblyName"
    Scope="singleton"/>
</module>

每个绑定元素包含至少两个属性:

  • Service:代表服务类型,经常是一个接口或是抽象类
  • To:代表具体类型,服务类型的具体实现

 

下面给出一个Ninject XML配置的例子。创建一个IEncryptor接口,接口提供一个加密方法Encrypt。两个不同的加密算法类(ReverseEncryptor和ShiftEncryptor)继承IEncryptor接口,这两个算法类提供了两种加密算法。在XML配置文件里动态配置使用其中的一个具体算法类。这个配置可以在之后不重新编译程序的情况下动态修改,影响应用程序的行为。

1. 使用NuGet工具添加Ninject.Extensions.Xml引用,注意Dependencies。

技术分享

2. 创建接口和类

 1 using System.Linq;
 2 
 3 namespace Demo.Ninject
 4 {
 5     public interface IEncryptor
 6     {
 7         string Encrypt(string str);
 8     }
 9 
10     public class ReverseEncryptor : IEncryptor
11     {
12         public string Encrypt(string str)
13         {
14             var charArray = str.Reverse().ToArray();
15             return new string(charArray);
16         }
17     }
18 
19     public class ShiftEncryptor : IEncryptor
20     {
21         public string Encrypt(string str)
22         {
23             var charArray = str.Select(c => (char)(c + 1)).ToArray();
24             return new string(charArray);
25         }
26     }
27 }

3. 创建XML配置文件:TypeRegistrations.xml

<?xml version="1.0" encoding="utf-8" ?>
<module name="encryptorModule">
  <bind service="Demo.Ninject.IEncryptor, Demo.Ninject" to="Demo.Ninject.ShiftEncryptor, Demo.Ninject" />
</module>

我的应用程序assembly名称是Demo.Ninject,接口和类所在的名称空间是Demo.Ninject。

设置xml文件的Copy if newer属性:

技术分享

4. 修改Main函数。

 1 using Ninject;
 2 using System;
 3 
 4 namespace Demo.Ninject
 5 {
 6     class Program
 7     {
 8         static void Main(string[] args)
 9         {
10             using (var kernel = new StandardKernel())
11             {
12                 kernel.Load("TypeRegistrations.xml");
13 
14                 var encryptor = kernel.Get<IEncryptor>();
15                 Console.WriteLine(encryptor.Encrypt("Hello"));
16 
17                 Console.ReadLine();
18             }
19         }
20     }
21 }

5. 编译程序,在bin\Debug文件夹下找到应用程序的exe文件,双击执行。得到ShiftEncryptor算法的结果。

技术分享

6.  用记事本打开文件TypeRegistrations.xml,修改bind节的to属性,改成ReverseEncryptor。

 技术分享

7. 直接再次运行exe文件,得到ReverseEncryptor算法的结果。不重新编译应用程序的情况下,通过XML文件动态改变了绑定类型。

技术分享

 

下面的代码片段演示了怎样将多个XML文件加载到kernel内。

kernel.Load("module1.xml","module2.xml","module3.xml");

可以使用相对输出路径的路径,也可以使用绝对路径。

也可以使用通配符“*”。下面的代码例子中,kernel加载正在执行的assembly的同样路径下所有的xml文件:

kernel.Load("*.xml");

下面的例子中,kernel加载应用程序目录下的Modules文件夹内的所有xml文件:

kernel.Load("Modules/*.xml");

 

Ninject之旅之五:Ninject XML配置

标签:

原文地址:http://www.cnblogs.com/uncle_danny/p/5918017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!