松耦合应用程序构建技术-依赖注入(Unity)

如果编程时,对于调用者,只需知道接口定义能调用具体实现类的方法,将极大方便构建松耦合应用程序。这里讨论一种这样的技术:依赖注入。微软P&P团队开发的应用程序块Unity就是这样的一个依赖注入容器。

Unity包含接口注入,属性注入,构造函数注入,这里具体说明接口注入。明白了一种,其他类似。

本文将演示Unity的基本应用。

 

Unity 容器的接口注入基本用法

1.引用Unity程序块,Unity1.2可以从这里下载:http://www.microsoft.com/downloads/details.aspx?FamilyId=2C8B79E7-AE56-4F90-822E-A1E43C49D12E&displaylang=en

2.创建Unity 容器

2.注册接口的映射类

3.指定容器返回类的实例。
C#代码:

IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType
<IMyService, CustomerService>();
IMyService myServiceInstance
= myContainer.Resolve<IMyService>();

上列中myServiceInstance就是Unity 容器创建的CustomerService 类(实现了IMyService 接口)的实例。

上例中注册接口的映射类,显式调用了CustomerService 类名。Unity 提供了另外一种注册方法:从 XML 配置文件中读取,这样IMyService的使用者可以不知道IMyService的具体实现,甚至不知道实现类的类名的情况下正常使用IMyService。

  XML 配置分2部分,1部分为配置Unity

代码
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>

第2部分为配置映射关系:

代码
<unity>
<containers>
<container name="">
<types>
<type type="Unity.Demo.IMyService,Unity.Demo" mapTo="Unity.Demo.CustomerService,Unity.Demo">
<lifetime type="singleton"/>
</type>

</types>
</container>
</containers>
</unity>

type 配置格式为【类,命名空间】,lifetime表示创建实例的生命周期。

 

 

 读取XML 配置的C#代码:

代码
IUnityContainer Container = new UnityContainer();
ConfigurationSection unitySection
= ConfigurationManager.GetSection("unity") as UnityConfigurationSection;
unitySection.Containers.Default.Configure(Container);
IMyService myServiceInstance
= myContainer.Resolve<IMyService>();

 

posted on 2010-06-18 17:18  钟湘光  阅读(612)  评论(0编辑  收藏  举报

导航