微软企业库5.0学习笔记(十五)
2010-06-06 00:13
225 查看
依赖注入容器Unity:
Unity的构造类似于Castle中的IOC(控制反转 或者叫依赖注入)容器,我们使用抽象接口来隔离使用者和具体实现之间的依赖关系,但是不管再怎么抽象,最终还是要创建具体实现类的实例,这种创建具体实现类的实例对象就会造成对于具体实现的依赖,为了消除这 种创建依赖性,需要把依赖移出到程序的外部(比如配置文件)。使用依赖注入后,这些类完全是基于抽象接口编写而成的,所以可以最大限度地适应需求的变化。 依赖注入的形式有三种,分别为构造子注入(Constructor Injection)、设值方法注入(Setter Injection)和接口注入(Interface Injection)。还是和以前一样,我们用实际的需求来做演示,说明这个模块到底能解决什么实际的问题吧(以下的例子是仿照TerryLee的文章: Castle IOC容器快速入门,在此我使用Unity来恢复现场,给大家演示如何用Unity解决相同的问题 ):
现在假如我们有这样一个需求,开发一个日志组件,把日志信息输出到文本文件,同时对输出的信息进行格式化,以示意性的代码来实现.1.创建一个新的控制台应用程序,加入需要的Dll文件,并添加需要的引用:
代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Practices.Unity; namespace test { class Program { static void Main(string[] args) { Console.WriteLine("测试一:"); test1(); Console.WriteLine("测试二:"); test2(); } private static void test1() { //1. 日志格式化只是日志服务中的一个组件.(注:在此实例化该组件没有多大意义,唯一用处只是用来给服务提供一个参数) ILogFormatter logFormatter = new TextFormatter("/"); //2.创建服务 ILog logServer = new TextFileLog(@"C:\test.log",logFormatter); //3.使用服务 logServer.Write("日志正文"); } private static void test2() { //1.注册了一个容器; IUnityContainer container = new UnityContainer(); //2.向容器中注册ILog服务,并告诉容器用TextFileLog实现这个服务 container.RegisterType<ILog, TextFileLog>(); //3.向容器中注册ILogFormatter,并告知容器用TextFormatter实现它 // 容器发现类的构造函数还需要另外一个参数Target,这里用InjectionProperty注入该参数 container .RegisterType<ILogFormatter, TextFormatter>(new InjectionProperty("Target", "/")) .RegisterInstance<string>(@"C:\test.log"); //4.获取服务 ILog log = container.Resolve<ILog>(); //5.使用服务,到此为止我们都没有使用new关键字创建一个具体类的实例, // 完全屏蔽了组件和服务的实例化,而由Unity自动装配,使得程序更加的灵活. log.Write("日志正文"); } } }
相关文章推荐
- 微软企业库5.0学习笔记(三十四)数据访问模块 各种获取数据的方式
- 微软企业库5.0学习笔记(八)
- 微软企业库5.0学习笔记(三十四)数据访问模块 各种获取数据的方式
- 微软企业库4.1学习笔记(十五)缓存模块3 使用数据库作为后端存储
- 微软企业库5.0学习笔记(三十五)数据访问模块 DataSet以及数据库事务
- 微软企业库5.0学习笔记(四)配置企业库
- 微软企业库5.0学习笔记(十一)
- 微软企业库5.0学习笔记(十三)
- 微软企业库5.0学习笔记(三十五)数据访问模块 DataSet以及数据库事务
- 微软企业库5.0学习笔记(三)企业库主要内容
- 微软企业库5.0学习笔记(七)存储容器的引用
- 微软企业库5.0学习笔记(八)windows窗体和WPF应用
- 微软企业库5.0学习笔记(二)
- 微软企业库5.0学习笔记(三十三)数据访问模块
- 微软企业库5.0学习笔记数据验证模块
- 微软企业库5.0学习笔记(九)
- 微软企业库4.1学习笔记(十五)缓存模块3 使用数据库作为后端存储
- 微软企业库5.0学习笔记(三)
- 微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
- 微软企业库5.0学习笔记(五)引用企业库程序集及企业库的依赖