您的位置:首页 > 其它

Castle IOC容器构建配置详解(二)

2014-03-22 16:59 218 查看
主要内容

  1.基本类型配置

  2.Array类型配置

  3.List类型配置

  4.Dictionary类型配置

  5.自定义类型转换

  一.基本类型配置

  在Castle IOC的配置文件中,大家可能都已经注意一个问题了,就是不管组件接收的是什么基本数据类型,我们一律没有在配置文件中指定,也就是说,不管组件接收的类型是int型或者是String类型,我们都可以这样去配置:

双击代码全选

  这是因为在Castle IOC中,MicroKernel中的SubSystem中有一个TypeConverter,它专门负责类型的转换。参数的注入一般都是通过构造函数或者公有的属性,基本数据类型在配置文件我们不需要用专门的节点去配置,但是对于一些复杂的数据类型久有些不一样。目前Castle IOC能够支持的数据类型如下。

类型节点示例
System.Int32, Int16, Int64-<parameters>

  <port>10</port>

  </parameters>

System.UInt32, UInt16, UInt64-<parameters>

  <port>10</port>

  </parameters>

System.Char-<parameters>

  <letter>a</letter>

  </parameters>

System.Single, Double, Decimal-<parameters>

  <threshold>13.22</threshold>

  </parameters>

System.String-<parameters>

  <server>mail.host.com</server>

  </parameters>

System.Byte, SByte-<parameters>

  <rcolor>144</rcolor>

  </parameters>

System.Boolean-<parameters>

  <enabled>0</enabled>

  </parameters>

System.DateTime-<parameters>

  <initial>11022005</initial>

  </parameters>

System.Type-<parameters>

  <type>Components.MyComponent, Components</type>

  </parameters>

System.Arrayarray参见后面
System.Collections.IListlist参见后面
System.Collections.IDictionarydictionary参见后面
  如果有其它的类型,我们需要编写自定义的TypeConverter。

  二.Array类型配置

  组件构造函数有一个Array的参数

双击代码全选

  这时候我们的配置文件可以如下去写

双击代码全选

  三.List类型配置

  组件构造函数有一个IList类型的参数

双击代码全选

  这时候我们的配置文件应该如下

双击代码全选

四.Dictionary类型配置

  组件构造函数有一个Idictionary类型的参数

双击代码全选

配置文件应该如下去写:

双击代码全选

  或者我们可以在配置文件中分别指定Key和Value的数据类型,分别使用keyType和valueType。

双击代码全选

  五.自定义类型转换

  要实现我们自定义的类型转换,在这之前我们还是花一点时间来看看Castle IOC中是如何实现类型的转换的。在SubSystems中有一个Conversion,专门负责类型的转换,通过一个类型转换器ConversionManager来实现对类型转换的管理,在DefaultConversionManager初始化的时候,会加载以下几个类型转换:

双击代码全选

  这些类型转换器之间的结构图如下:



  图1

  PrimitiveConverter:负责基本数据类型的转换

  TypeNameConverter:负责把一个类型的名字转换成这个类型的实例

  EnumConverter:负责枚举类型的转换

  ListConverter:负责Ilist数据类型的转换

  DictionaryConverter:负责Idictionary数据类型转换

  ArrayConverter:负责Array数据类型转换

  以其中的PrimitiveConverter为例来看一下它的实现代码:

双击代码全选

  可以看到,Castle IOC会把所有的配置参数都当作String类型接收,如果目标类型是String,则直接返回结果,否则再进行类型转换。由此我们可以分析得出,要实现自己的类型转换,有以下两步:

  1.编写的自己的类型转换类,实现接口ITypeConverter

双击代码全选

  2.添加自己的类型转换到ConversionManager中

双击代码全选

  关于Castle IOC容器中构建配置信息就到这里了,我总共分为了一,二两部分来讲解。Castle IOC系列的文章后续还有很多,希望大家继续关注!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: