关于微软企业库中依赖注入容器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的一个简单应用。。
首先感谢许多牛人的帮助,我们要学的东东太多。。。大家努力吧
下面简单介绍下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的一个简单应用。。
首先感谢许多牛人的帮助,我们要学的东东太多。。。大家努力吧
相关文章推荐
- 关于微软企业库中依赖注入容器Unity两种生成对象的实现u
- 微软企业库4.1学习笔记(二十四)Unity依赖注入模块 简介
- 微软的依赖注入容器,Unity
- 微软企业库4.1学习笔记(四十一)依赖注入模块Unity 简介
- 微软企业库4.1学习笔记(四十一)依赖注入模块Unity 简介
- 微软企业库4.1学习笔记(五)对象创建和依赖注入方法
- 微软企业库4.1学习笔记(五)对象创建和依赖注入方法
- 微软企业库4.1学习笔记(二十四)Unity依赖注入模块 简介
- (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART3——依赖注入
- [EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART3——依赖注入
- 微软企业库4.1学习笔记(五)对象创建和依赖注入方法
- 微软企业库4.1学习笔记(二十六)Unity依赖注入模块3
- 微软企业库4.1学习笔记(四十一)依赖注入模块Unity 简介
- 深入 Unity 1.x 依赖注入容器之三:获取对象
- 微软企业库4.1学习笔记(五)对象创建和依赖注入方法
- 微软企业库4.1学习笔记(二十四)Unity依赖注入模块 简介
- 微软企业库4.1学习笔记(二十五)Unity依赖注入模块2
- 深入 Unity 1.x 依赖注入容器之三:获取对象
- 微软企业库4.1学习笔记(二十五)Unity依赖注入模块2
- 微软企业库4.1学习笔记(二十六)Unity依赖注入模块3