




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业可持续发展中的关键技术生物乙醇技术应用探讨
- 教育心理学在多元文化教育中的实践
- 智慧城市规划中的商业价值挖掘与实现
- 抖音商户编导短视频节奏控制制度
- 抖音商户策划专员用户画像更新制度
- 全球化浪潮下2025年跨文化交流能力培养的实证研究报告
- 公交优先战略下城市交通拥堵治理的公共交通优先道设置研究报告
- CAP-100-生命科学试剂-MCE
- 南京视觉艺术职业学院《碑帖鉴赏》2023-2024学年第一学期期末试卷
- 广西大学《机电传动与控制》2023-2024学年第一学期期末试卷
- 外研版(2024)七年级上册英语全册教案教学设计
- 人教版九年级物理全一册《14.1热机》同步练习题带答案
- 研讨报告的格式范文模板
- 山东省青岛市2023-2024学年五年级下学期6月期末科学试题
- GB/T 44130.1-2024电动汽车充换电服务信息交换第1部分:总则
- 政府门户网站技术运维服务方案
- 中考重庆作文满分范文英语
- 伤口造口进修汇报护理
- GB/T 43635-2024法庭科学DNA实验室检验规范
- 2023-2023学年贵州省黔西南州八年级(下)期末数学试卷(附答案详解)
- 普利制药SAP项目研发产品及工艺验证产品费用归集V11
评论
0/150
提交评论