public static void ContainerCode() { IUnityContainer container = new UnityContainer(); container.RegisterType<IClass, MyClass>(); //另一种注册方法,不过没有RegisterType<>()方法来的方便 //container.RegisterType(typeof(IClass), typeof(MyClass)); IClass classInfo = container.Resolve<IClass>(); //另一种通过container获取具体对象的方法 //IClass classInfo = container.Resolve(typeof(IClass)); classInfo.ShowInfo(); }
使用Unity来管理对象与对象之间的关系可以分为以下几步:
1、创建一个UnityContainer对象。
2、通过UnityContainer对象的RegisterType方法来注册对象与对象之间的关系。
3、通过UnityContainer对象的Resolve方法来获取指定对象关联的对象。
使用配置文件来实现对象关系注册:
以上是通过代码的方式来注册对象之间的关系,但是对于一个项目来说,正式部署后,由于代码都编译成DLL,如果要修改依赖关系则修改代码并重新编译,相对来说太麻烦了,所以Unity还提供配置文件配置的方式来配置对象之间的关系,配置如下:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <configSections> 4 <section name="unity" 5 type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, 6 Microsoft.Practices.Unity.Configuration"/> 7 </configSections> 8 <unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 9 <alias alias="IClass" type="UnityStudyConsole.IDemo.IClass, UnityStudyConsole" /> 10 <alias alias="MyClass" type="UnityStudyConsole.Demo.MyClass, UnityStudyConsole" /> 11 12 <container> 13 <register type="IClass" name="ConfigClass" mapTo="MyClass" /> 14 </container> 15 </unity> 16 </configuration>
具体代码调用如下:
通过配置文件配置Unity信息需要有以下几个步骤:
1、在配置文件中<configSections> 配置节下unity注册。
2、在<configuration> 配置节下添加Unity配置信息。
3、在代码中读取配置信息,并将配置载入到UnityContainer中。
使用配置文件来配置对象信息虽然可以在部署的时候更改对象之间的依赖关系,但是当系统过于复杂,则就会导致配置文件的增大,所以我们需要将Unity的配置信息从App.config或web.config中分离出来,但是这样的话前面的代码中调整如下:
public static void ContainerConfiguration() { IUnityContainer container = new UnityContainer(); //获取指定名称的配置节 UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); //默认方法,默认获取名称为"unity"配置节下配置信息 container.LoadConfiguration(); //获取已命名的配置节<container name="FirstClass">下的配置信息 container.LoadConfiguration("FirstClass"); //获取特定配置节下配置信息 container.LoadConfiguration(section); //获取特定配置节下已命名的配置节<container name="FirstClass">下的配置信息 container.LoadConfiguration(section, "FirstClass"); IClass classInfo = container.Resolve<IClass>("ConfigClass"); classInfo.ShowInfo(); }
由于Unity配置相对来说比较复杂,一下子难以上手,而且不像企业库的其他模块可以通过配置工具进行配置,所以p&p小组为了方便通过配置文件进行Unity配置,已经在企业库5.0的安装包中内置了UnityConfiguration20.xsd,你可以在X:Program FilesMicrosoft Visual Studio X.0XmlSchemas下找到,这样就可以在配置文件中进行Unity配置时出现只能提示了,如下图:
需要注意的是,如果想出现这种提示,需要在新增的unity配置节中增加一个xmlns为。(如果没有安装过EntLib5,所以没有UnityConfiguration20.xsd,可以在下面的示例代码中找到这个xsd。)