Unity Application Block能从XML配置文件读取配置信息。 默认情况下,一般是随同应用程序的
App.config和
Web.config文件。然而,你也能从其他XML格式文件或者其他来源中加载配置信息。 接下来的章节中详细描述了如何配置Unity Application Block:
- Unity配置文件格式
- 加载配置信息到容器
- 使用替换配置源
- 动态配置构造函数,属性和方法注入
- Unity配置图解
- 针对Unity Application Block的源结构
Unity配置文件格式
如下的XML展示了配置文件的大体结构。 如果你想针对application block提供配置信息,必须使用文本编辑器(例如Visual Studio文本编辑)修改该文件。对于Unity Application Block中每个元素(element)和属性(attribute)的具体含义,参见针对Unity Application Block的源结构 和 Unity配置图解
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
</configSections>
<unity>
<typeAliases>
<typeAlias alias="int" type="System.Int32, mscorlib" />
<typeAlias alias="singleton"
type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
<typeAlias alias="transient"
type="Microsoft.Practices.Unity.TransientLifetimeManager, Microsoft.Practices.Unity" />
<typeAlias alias="IMachineDisplay"
type="SlotMachine.IMachineDisplay, SlotMachine" />
<typeAlias alias="ISpinner"
type="SlotMachine.ISpinner, SlotMachine" />
<typeAlias alias="IWinningsCalculator"
type="SlotMachine.IWinningsCalculator, SlotMachine" />
</typeAliases>
<containers>
<container>
<types>
<type type="IMachineDisplay" mapTo="SlotMachine.ConsoleDisplay, SlotMachine">
<lifetime type="singleton" />
</type>
<type type="ISpinner" mapTo="SlotMachine.SimpleSpinner, SlotMachine">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<property name="Display" propertyType="IMachineDisplay" />
</typeConfig>
</type>
<type type="IWinningsCalculator" mapTo="SlotMachine.AirportWinningsCalculator, SlotMachine" />
<type type="SlotMachine.SlotMachine, SlotMachine">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
<constructor>
<param name="id" parameterType="int">
<value value="37" type="int" />
</param>
<param name="display" parameterType="IMachineDisplay">
<dependency />
</param>
<param name="spinner" parameterType="ISpinner">
<dependency />
</param>
<param name="calculator" parameterType="IWinningsCalculator">
<dependency name="debug"/>
</param>
</constructor>
</typeConfig>
</type>
</types>
</container>
<container name="child">
<types>
<type type="IMachineDisplay" mapTo="SlotMachine.ConsoleDisplay, SlotMachine">
<lifetime type="transient" />
</type>
</types>
</container>
</containers>
</unity>
</configuration>
编辑
1.1 配置节
Unity 的配置节的名称为”unity",节处理程序的类型为 Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,它包含在程序 集 Microsoft.Practices.Unity.Configuration 中。
编辑
1.2 unity 的子元素
unity 的子元素包含了一个 containers 元素,此元素有一个必须的属性 Default (此属性在目前的版本中不可用),它用于指定在不指定容器获取容器的配置时的默认容器。
containers 元素可以包含若干个 container 元素。container 元素就是每个容器的配置,它有一个可选的 name 属性,用于指定容器的名称。
container 元素有下列子元素:
- types 元素
- instances 元素
- extensions 元素
注意:不能嵌套定义容器,即 container 元素不能嵌套。
编辑
1.3 types 元素
types 元素是 container 元素的子元素之一。包含任意数量的 type元素,用以添加类型注册。
下面的表格列出了用于 types 的 type元素的属性。
属性 |
描述 |
name |
在注册此类型时使用的名称。此属性是可选的,如果不指定此属性,所在的 add 元素即为默认的类型映射。 |
type |
容器中配置的源类型。如果这是映射注册,这就是映射的起始对象的类型;如果这是单件注册,这就是对象的类型。此属性是必须的。 |
mapTo |
类型映射的目标类型。如果这是映射注册,这就是映射的目标对象的类型。此属性是可选的。 |
lifetime |
设 置用于给定的类型和名称的生命周期。是一个来自 LifetimeStyle 枚举的值。有效的值是 Transient(默认),它导致了容器每次都创建一个新的实例;以及 Singleton,它使容器为每个请求返回同一实例。如果在配置一个单件时同时指定了 type 和 mapto 属性,SetSingleton 方法将返回指定在 mapTo 属性中的类型。如果 mapTo 属性没有指定值,SetSingleton 方法将返回指定在 type 属性中的类型。 |
在此的单件(Singleton)即是人们常说的单件模式中的单件。SetSingleton 方法是容器提供的用于获取单件的方法。容器会根据 lifetime 属性来决定生成实例的方式。
编辑
1.4 instances 子元素
instances 元素保持了用于此容器的已有对象实例的列表。这些对象(包括简单类型如数据库连接字符串)被用容器的 RegisterInstance 方法进行注册。instances 元素包含了一系列添加单个实例的 add 元素。
下面的表格列出了用于用于实例的 add 元素的属性。
属性 |
描述 |
name |
注册此实例时使用的名称。此属性是可选的。 |
type |
此实例的类型。此属性是可选的。如果忽略,假定的类型是 System.String。 |
value |
用于初始化实例的值。此属性是必须的。 |
typeConverter |
用以转换提供的值到实例的匹配类型的类型转换器。如果没有指定,将使用指定类型的默认转换器。此属性是可选的。 |
编辑
1.5 extensions 元素
extensions 元素保持了添加注册到 Unity 容器的扩展的列表。extensions 包含一系列添加单个扩展的 add 元素。
下面的表格列出了用于用于扩展的 add 元素的属性。
属性 |
描述 |
type |
添加到容器的扩展的类型。此属性是必须的。 |