您的位置:首页 > 移动开发 > Unity3D

关于微软企业库中依赖注入容器Unity两种生成对象的实现

2010-08-12 14:15 791 查看
看了很多牛人关于Unity的文章后,深有感触

下面简单介绍下UnityContainer 怎么注册和生成具体类的对象

假设我们一个命名空间为UnityContainerText的项目中拥有一个接口和实现该接口的类

namespace UnityContainerText
{
publicinterface ILogger
{
void Writer();
}
}

publicclass DatabaseLogger:ILogger
{

publicvoid Writer()
{
Console.WriteLine("Hello! Unity");
}

}

当然,工作开始前还要先导入Microsoft.Practices.Unity.Configuration.dll和Microsoft.Practices.Unity.dll

首先介绍的是硬编码的方式注册和获取类实例:如下图

代码

static void Main(string[] args)
{

IUnityContainer container = new UnityContainer();
UnityConfigurationSection section = ConfigurationManager.GetSection("unity") as UnityConfigurationSection;
section.Containers.Default.Configure(container);
ILogger logger = container.Resolve<ILogger>("databaseLogger");
logger.Writer();
Console.ReadLine();
}

第二行中的 UnityConfigurationSection section = ConfigurationManager.GetSection("unity") as UnityConfigurationSection;

这个是通过配置文件中<configSections>标签内的<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
获得<unity>标签下的内容

第三行: section.Containers.Default.Configure(container);这样就会根据配置文件的配置,向容器中注册类型的映射;

如果配置中有多个容器,如果只是想加载某个的话,可以指定加载:section.Containers["ctrOne"].Configure(container);

随后 ILogger logger = container.Resolve<ILogger>("databaseLogger");

便可以直接加载出对象了,而不需要先加载一堆诸如container.register().....的方法了,这样大大降低了代码的耦合

补充下:unity 容器可以实现子容器,也就是当父容器释放的时候,子容器也释放,但是子容器释放不影响父容器的使用

UnityContainer container = parentContainer.CreateChildContainer();

如图所示



这就是Unity的一个简单应用。。

首先感谢许多牛人的帮助,我们要学的东东太多。。。大家努力吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐