摘要

使用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. 创建接口和类

 using System.Linq;

 namespace Demo.Ninject
{
public interface IEncryptor
{
string Encrypt(string str);
} public class ReverseEncryptor : IEncryptor
{
public string Encrypt(string str)
{
var charArray = str.Reverse().ToArray();
return new string(charArray);
}
} public class ShiftEncryptor : IEncryptor
{
public string Encrypt(string str)
{
var charArray = str.Select(c => (char)(c + )).ToArray();
return new string(charArray);
}
}
}

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函数。

 using Ninject;
using System; namespace Demo.Ninject
{
class Program
{
static void Main(string[] args)
{
using (var kernel = new StandardKernel())
{
kernel.Load("TypeRegistrations.xml");

var encryptor = kernel.Get<IEncryptor>();
Console.WriteLine(encryptor.Encrypt("Hello")); Console.ReadLine();
}
}
}
}

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配置的更多相关文章

  1. Ninject之旅目录

    第一章:理解依赖注入 Ninject之旅之一:理解DI 第二章:开始使用Ninject Ninject之旅之二:开始使用Ninject(附程序下载) Ninject之旅之三:Ninject对象生命周期 ...

  2. Ninject之旅之一:理解DI

    摘要: DI(IoC)是当前软件架构设计中比较时髦的技术.DI(IoC)可以使代码耦合性更低,更容易维护,更容易测试.现在有很多开源的依赖反转的框架,Ninject是其中一个轻量级开源的.net DI ...

  3. Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

    本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...

  4. Spring_Task初探(注解,XML配置)

    这几天想写一个动态添加任务项目找了找Spring下的自带定时功能发现还真有,然后网上找了找资料写了个demo 写了两种方式来执行定时的任务(XML配置和注解) 先建两个普通的任务类(XML配置调用的任 ...

  5. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  6. SpringMvc的xml配置与annotation配置的例子的区别

    1.导入jar包时,要在xml配置基础上加 spring-aop-4.2.2.RELEASE.jar (注解的时候需要) 2.编写controller的时候要annotation需要做相关配置即红色部 ...

  7. Hibernate实现有两种配置,xml配置与注释配置

    hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) < ...

  8. java web.xml配置详解

    1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...

  9. 关于xml配置实现AOP的小知识

    除了前面介绍的基于JDK1.5的注解方式来定义切面,切入点和增强处理外,Spring AOP也允许直接使用XML配置文件来管理它们.在JDK1.5之前,只能使用配置文件的方式来管理,在Spring2. ...

随机推荐

  1. jQuery高级编程

    jquery高级编程1.jquery入门2.Javascript基础3.jQuery核心技术 3.1 jQuery脚本的结构 3.2 非侵扰事JavaScript 3.3 jQuery框架的结构 3. ...

  2. app后端设计(12)--图片的处理

    app上线后,不断接受用户的反馈,于是,反馈非常差的情况下,都会有app的改版. 一旦app的改版,都会有比较大的UI改动,一改动UI,那么图片的尺寸也就必须要改变. 在app后端设计(1)—api( ...

  3. Unity中Instantiate一个prefab时需要注意的问题

    在调用Instantiate()方法使用prefab创建对象时,接收Instantiate()方法返回值的变量类型必须和声明prefab变量的类型一致,否则接收变量的值会为null.   比如说,我在 ...

  4. IIS7.5打开GZip压缩,同时启用GZip压缩JS/CSS文件的设置方法[bubuko.com]

    IIS7.5或者IIS7.0开启GZip压缩方法:打开IIS,在右侧点击某个网站,在功能视图中的“IIS”区域,双击进入“压缩”,如图下图: 分别勾选“启用动态内容压缩”和“启用静态内容压缩”.这样最 ...

  5. Turn off Debug Logging in Quartz .Net

    Quartz.net uses Common.Logging, so something like this in your App.config/Web.config: <configSect ...

  6. Pychram如何导入Django项目

    最近在学Django,用GitHub来保存项目.但当从GitHub中clone出来后,Pycharm怎么来运行项目呢? 首先要对项目进行设置,使其能支持Django,具体设置如下: 在Pycharm中 ...

  7. (OpenCV) VS2013 + opencv-2.4.10.exe + Windows 10 开发环境配置

    主要配置2点: - Windows 环境变量. - VC++ 配置. STEP BY STEP: 1. 双击 ”opencv-2.4.10.exe“,解压到本地文件夹 “C:\ ". 2. ...

  8. korn shell

    "$*" is a single string that consists of all of the positional parameters "$@"   ...

  9. bug_ _

    java.lang.SecurityException: Not allowed to bind to service I app中加了百度定位功能,大部分手机测试没问题,但有部分手机会定位失败,提示 ...

  10. SQLServer 创建dtsx包更新统计信息(示例)

    http://blog.csdn.net/kk185800961/article/details/43816177(转载) 1 . 打开Microsoft Visual Studio 创建 integ ...