Castle IOC容器快速入門(mén)_第1頁(yè)
Castle IOC容器快速入門(mén)_第2頁(yè)
Castle IOC容器快速入門(mén)_第3頁(yè)
Castle IOC容器快速入門(mén)_第4頁(yè)
Castle IOC容器快速入門(mén)_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

CastleIOC容器快速入門(mén)主要內(nèi)容為什么要IOC什么是CastleIOC容器3.快速入門(mén)示例4.幾個(gè)重要的概念一,為什么要IOCIOC(控制反轉(zhuǎn)或者叫依賴注入)MartinFowler大師在他的文章中已經(jīng)講解的非常精彩了,這里實(shí)在不敢班門(mén)弄斧,只好簡(jiǎn)單地解釋幾句。我們使用抽象接口來(lái)隔離使用者和具體實(shí)現(xiàn)之間的依賴關(guān)系,但是不管再怎么抽象,最終還是要?jiǎng)?chuàng)建具體實(shí)現(xiàn)類的實(shí)例,這種創(chuàng)建具體實(shí)現(xiàn)類的實(shí)例對(duì)象就會(huì)造成對(duì)于具體實(shí)現(xiàn)的依賴,為了消除這種創(chuàng)建依賴性,需要把依賴移出到程序的外部(比如配置文件)。使用依賴注入后,這些類完全是基于抽象接口編寫(xiě)而成的,所以可以最大限度地適應(yīng)需求的變化。依賴注入的形式有三種,分別為構(gòu)造子注入(ConstructorInjection)、設(shè)值方法注入(SetterInjection)和接口注入(InterfaceInjection)。什么是CastleIOC容器Windsor是Castle的一個(gè)IOC容器。它構(gòu)建于MicroKernel之上,功能非常之強(qiáng)大,能檢測(cè)類并了解使用這些類時(shí)需要什么參數(shù),檢測(cè)類型和類型之間工作依賴性,并提供服務(wù)或者發(fā)生錯(cuò)誤時(shí)提供預(yù)警的機(jī)制。快速入門(mén)示例現(xiàn)在假如我們有這樣一個(gè)需求,開(kāi)發(fā)一個(gè)日志組件,把日志信息輸出到文本文件,同時(shí)對(duì)輸出的信息進(jìn)行格式化,以示意性的代碼來(lái)實(shí)現(xiàn)。1.新建一個(gè)C#工程,添加對(duì)以下Dll的引用Castle.DynamicProxy.dllCastle.MicroKernel.dllCastle.Model.dllCastle.Windsor.dll

2.編寫(xiě)服務(wù)既然是日志組件,我們先添加兩個(gè)接口分別為ILog和ILogFormatter,這樣的接口我們一般叫做服務(wù),即實(shí)現(xiàn)了某種服務(wù)的接口(后面會(huì)講到)。日國(guó)///<summary>II///編寫(xiě):TerryleeII///出處:IL///</summary>publicinterfaceILog日E{IIvoidWrite(stringMsgStr);I}日國(guó)///<summary>II///編寫(xiě):TerryleeII///出處:L///</summary>publicinterfaceILogFormatter日E{IIstringFormat(stringMsgStr);I}編寫(xiě)組件僅僅有接口還不行,還需要實(shí)現(xiàn)了上面兩個(gè)接口的具體實(shí)現(xiàn)類,這些類我們把它叫做組件。日國(guó)///<summary>II///編寫(xiě):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///編寫(xiě):TerryleeI///出處:L///</summary>publicclassTextFormatter:ILogFormatterpublicTextFormatter()publicstringFormat(stringMsgStr)return"["+MsgStr+"]";編寫(xiě)配置文件編寫(xiě)配置文件,由于TextFileLog構(gòu)造函數(shù)中除了需要一個(gè)ILogFormatter的實(shí)例之外,還需要指定信息的輸出的文本文件名,所以編寫(xiě)一個(gè)配置文件來(lái)指定,這個(gè)也可以放在應(yīng)用程序配置文件中(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做準(zhǔn)備,下面就是正式使用了。使用CastleIOC容器非常簡(jiǎn)單,基本上分為建立容器,加入組件,獲取組件,使用組件幾個(gè)步驟。日田///<summary>II///編寫(xiě):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();簡(jiǎn)單的描述一下:第一步:注冊(cè)了一個(gè)Windsor容器;第二步:向容器中注冊(cè)ILog服務(wù),并告訴容器TextFileLog實(shí)現(xiàn)了這個(gè)服務(wù),這里還設(shè)置了一個(gè)key的參數(shù),后面可以通過(guò)這個(gè)參數(shù)來(lái)獲取這個(gè)服務(wù),注冊(cè)ILog時(shí)容器會(huì)發(fā)現(xiàn)這個(gè)服務(wù)依賴于其他的服務(wù),它會(huì)自動(dòng)去尋找,如果找不到這樣的服務(wù),則會(huì)拋出一個(gè)異常;第三步:向容器中注冊(cè)ILogFormatter并告知TextFormatter實(shí)現(xiàn)了它;第四步:容器發(fā)現(xiàn)類的構(gòu)造函數(shù)還需要另外一個(gè)參數(shù)target,這里指定了到BasicUsage.xml中去查找。運(yùn)行程序,可以看到輸出的結(jié)果:Output[FirstCastleIOCDemo]log.txt怎么樣?夠簡(jiǎn)單的吧??梢钥吹秸麄€(gè)過(guò)程非常的簡(jiǎn)單,代碼也非常優(yōu)雅,我們并沒(méi)有使用new關(guān)鍵字創(chuàng)建一個(gè)具體實(shí)現(xiàn)類的實(shí)例,至此,一個(gè)簡(jiǎn)單的使用CastleIOC的過(guò)程就完成了。下面我們來(lái)理解一下其中幾個(gè)重要的概念。幾個(gè)重要的概念1.服務(wù)服務(wù)是一個(gè)個(gè)的接口,接口約定了服務(wù),從而使隨意替換服務(wù)的實(shí)現(xiàn)對(duì)使用接口服務(wù)的代碼沒(méi)有任何的影響。像我們上面例子中的ILog,ILogFormatter都是一個(gè)個(gè)服務(wù),我們?cè)谶@個(gè)例子中支實(shí)現(xiàn)了一個(gè)文本文件的日志記錄,如果你要是實(shí)現(xiàn)數(shù)據(jù)庫(kù)記錄的日志記錄,都必須要遵守ILog這個(gè)接口。組件簡(jiǎn)單來(lái)說(shuō)組件是一個(gè)可重用的程序單元,它實(shí)現(xiàn)了某個(gè)接口,并僅僅只實(shí)現(xiàn)了這一個(gè)良好的接口。也就是說(shuō),組件是實(shí)現(xiàn)了某個(gè)服務(wù)接口的類。像上例中的TextFileLog,TextFormatter都是組件自動(dòng)裝配在上面的例子中,大家可能都已經(jīng)注意到了,TextFileLog依賴于TextFormatter,我們卻沒(méi)有在配置文件中指定它們之間的依賴關(guān)系,這就

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論