版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CastleIOC容器快速入门主要内容为什么要IOC什么是CastleIOC容器3.快速入门示例4.几个重要的概念一,为什么要IOCIOC(控制反转或者叫依赖注入)MartinFowler大师在他的文章中已经讲解的非常精彩了,这里实在不敢班门弄斧,只好简单地解释几句。我们使用抽象接口来隔离使用者和具体实现之间的依赖关系,但是不管再怎么抽象,最终还是要创建具体实现类的实例,这种创建具体实现类的实例对象就会造成对于具体实现的依赖,为了消除这种创建依赖性,需要把依赖移出到程序的外部(比如配置文件)。使用依赖注入后,这些类完全是基于抽象接口编写而成的,所以可以最大限度地适应需求的变化。依赖注入的形式有三种,分别为构造子注入(ConstructorInjection)、设值方法注入(SetterInjection)和接口注入(InterfaceInjection)。什么是CastleIOC容器Windsor是Castle的一个IOC容器。它构建于MicroKernel之上,功能非常之强大,能检测类并了解使用这些类时需要什么参数,检测类型和类型之间工作依赖性,并提供服务或者发生错误时提供预警的机制。快速入门示例现在假如我们有这样一个需求,开发一个日志组件,把日志信息输出到文本文件,同时对输出的信息进行格式化,以示意性的代码来实现。1.新建一个C#工程,添加对以下Dll的引用Castle.DynamicProxy.dllCastle.MicroKernel.dllCastle.Model.dllCastle.Windsor.dll
2.编写服务既然是日志组件,我们先添加两个接口分别为ILog和ILogFormatter,这样的接口我们一般叫做服务,即实现了某种服务的接口(后面会讲到)。日国///<summary>II///编写:TerryleeII///出处:IL///</summary>publicinterfaceILog日E{IIvoidWrite(stringMsgStr);I}日国///<summary>II///编写:TerryleeII///出处:L///</summary>publicinterfaceILogFormatter日E{IIstringFormat(stringMsgStr);I}编写组件仅仅有接口还不行,还需要实现了上面两个接口的具体实现类,这些类我们把它叫做组件。日国///<summary>II///编写:TerryleeII///出处:IL///</summary>publicclassTextFileLog:ILog日E{privatestring_target;privateILogFormatter_format;publicTextFileLog(stringtarget,ILogFormatterformat)this._target=target;this._format=format;publicvoidWrite(stringMsgStr)string_MsgStr=_format.Format(MsgStr);_MsgStr+=_target;//OutputMessageConsole.WriteLine("Output"+_MsgStr);日田///<summary>I///编写:TerryleeI///出处:L///</summary>publicclassTextFormatter:ILogFormatterpublicTextFormatter()publicstringFormat(stringMsgStr)return"["+MsgStr+"]";编写配置文件编写配置文件,由于TextFileLog构造函数中除了需要一个ILogFormatter的实例之外,还需要指定信息的输出的文本文件名,所以编写一个配置文件来指定,这个也可以放在应用程序配置文件中(Web.config或者App.config)。<?xmlversion="1.0"encoding="utf-8"?><configuration><components><componentid="txtLog"><parameters><target>log.txt</target></parameters></component></components></configuration>使用CastleIOC容器前面的几步仅仅是为我们CastleIOC做准备,下面就是正式使用了。使用CastleIOC容器非常简单,基本上分为建立容器,加入组件,获取组件,使用组件几个步骤。日田///<summary>II///编写:TerryleeIIII出处:L///</summary>publicclassApp日田{publicstaticvoidMain()〃建立容器IWindsorContainercontainer=newWindsorContainer(newXmllnterpreter(”../../BasicUsage.xml"));〃加入组件container.AddComponent("txtLog",typeof(ILog),typeof(TextFileLog));container.AddComponent("format",typeof(ILogFormatter),typeof(TextFormatter));ILoglog=(ILog)container["txtLog"];log.Write("FirstCastleIOCDemo");Console.ReadLine();简单的描述一下:第一步:注册了一个Windsor容器;第二步:向容器中注册ILog服务,并告诉容器TextFileLog实现了这个服务,这里还设置了一个key的参数,后面可以通过这个参数来获取这个服务,注册ILog时容器会发现这个服务依赖于其他的服务,它会自动去寻找,如果找不到这样的服务,则会抛出一个异常;第三步:向容器中注册ILogFormatter并告知TextFormatter实现了它;第四步:容器发现类的构造函数还需要另外一个参数target,这里指定了到BasicUsage.xml中去查找。运行程序,可以看到输出的结果:Output[FirstCastleIOCDemo]log.txt怎么样?够简单的吧。可以看到整个过程非常的简单,代码也非常优雅,我们并没有使用new关键字创建一个具体实现类的实例,至此,一个简单的使用CastleIOC的过程就完成了。下面我们来理解一下其中几个重要的概念。几个重要的概念1.服务服务是一个个的接口,接口约定了服务,从而使随意替换服务的实现对使用接口服务的代码没有任何的影响。像我们上面例子中的ILog,ILogFormatter都是一个个服务,我们在这个例子中支实现了一个文本文件的日志记录,如果你要是实现数据库记录的日志记录,都必须要遵守ILog这个接口。组件简单来说组件是一个可重用的程序单元,它实现了某个接口,并仅仅只实现了这一个良好的接口。也就是说,组件是实现了某个服务接口的类。像上例中的TextFileLog,TextFormatter都是组件自动装配在上面的例子中,大家可能都已经注意到了,TextFileLog依赖于TextFormatter,我们却没有在配置文件中指定它们之间的依赖关系,这就
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 有关会计实习报告集合(15篇)
- 体育实习报告集锦(5篇)
- 20《肥皂泡》(第一课时)(教学设计)统编版语文三年级下册
- 2025-2026学年麦子熟了教案
- 高中信息技术 图像的简单合成教学设计 沪教版必修1
- 2025-2026学年高二上学期冬季防火安全教育主题班会教学设计
- 高中信息技术 4.1 图形图像概述教案 粤教版选修2
- 2026年中学西游记模拟试题及答案详解
- 2026年不锈钢水暖波纹管产业市场发展及前景预测研究报告
- 2026年五官科护理模拟试题及答案详解
- 2026青岛胶州市中云街道办事处面向社会公开招聘非在编工作人员笔试参考题库及答案解析
- 2026年上海市普通高校统一文化考试试卷(全科含详细答案解析)
- 2026年度反洗钱阶段考试培训试考试题库(含答案)
- 三类医疗器械许可证考题库(附答案)
- 饮用水微生物污染全流程防控方案
- 2025年西部天然气招聘笔试题目及答案
- 2025年公安最美家庭先进事迹材料范文
- 低压电工专业知识培训课件
- 2025秋新人教版八上数学教学设计-14.2《三角形全等的判定(第5课时 HL)》(教学设计)
- 快乐购物 3 模拟购物(课件)数学冀教版二年级上册
- DB 5103∕T 24-2021 地理标志产品 自流井盐生产技术规范
评论
0/150
提交评论