![Castle IOC容器快速入門_第1頁](http://file4.renrendoc.com/view/f2ca2d2f1eff02cc30b979bc22a05f60/f2ca2d2f1eff02cc30b979bc22a05f601.gif)
![Castle IOC容器快速入門_第2頁](http://file4.renrendoc.com/view/f2ca2d2f1eff02cc30b979bc22a05f60/f2ca2d2f1eff02cc30b979bc22a05f602.gif)
![Castle IOC容器快速入門_第3頁](http://file4.renrendoc.com/view/f2ca2d2f1eff02cc30b979bc22a05f60/f2ca2d2f1eff02cc30b979bc22a05f603.gif)
![Castle IOC容器快速入門_第4頁](http://file4.renrendoc.com/view/f2ca2d2f1eff02cc30b979bc22a05f60/f2ca2d2f1eff02cc30b979bc22a05f604.gif)
![Castle IOC容器快速入門_第5頁](http://file4.renrendoc.com/view/f2ca2d2f1eff02cc30b979bc22a05f60/f2ca2d2f1eff02cc30b979bc22a05f605.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
CastleIOC容器快速入門主要內(nèi)容為什么要IOC什么是CastleIOC容器3.快速入門示例4.幾個重要的概念一,為什么要IOCIOC(控制反轉(zhuǎn)或者叫依賴注入)MartinFowler大師在他的文章中已經(jīng)講解的非常精彩了,這里實在不敢班門弄斧,只好簡單地解釋幾句。我們使用抽象接口來隔離使用者和具體實現(xiàn)之間的依賴關系,但是不管再怎么抽象,最終還是要創(chuàng)建具體實現(xiàn)類的實例,這種創(chuàng)建具體實現(xiàn)類的實例對象就會造成對于具體實現(xiàn)的依賴,為了消除這種創(chuàng)建依賴性,需要把依賴移出到程序的外部(比如配置文件)。使用依賴注入后,這些類完全是基于抽象接口編寫而成的,所以可以最大限度地適應需求的變化。依賴注入的形式有三種,分別為構造子注入(ConstructorInjection)、設值方法注入(SetterInjection)和接口注入(InterfaceInjection)。什么是CastleIOC容器Windsor是Castle的一個IOC容器。它構建于MicroKernel之上,功能非常之強大,能檢測類并了解使用這些類時需要什么參數(shù),檢測類型和類型之間工作依賴性,并提供服務或者發(fā)生錯誤時提供預警的機制??焖偃腴T示例現(xiàn)在假如我們有這樣一個需求,開發(fā)一個日志組件,把日志信息輸出到文本文件,同時對輸出的信息進行格式化,以示意性的代碼來實現(xiàn)。1.新建一個C#工程,添加對以下Dll的引用Castle.DynamicProxy.dllCastle.MicroKernel.dllCastle.Model.dllCastle.Windsor.dll
2.編寫服務既然是日志組件,我們先添加兩個接口分別為ILog和ILogFormatter,這樣的接口我們一般叫做服務,即實現(xiàn)了某種服務的接口(后面會講到)。日國///<summary>II///編寫:TerryleeII///出處:IL///</summary>publicinterfaceILog日E{IIvoidWrite(stringMsgStr);I}日國///<summary>II///編寫:TerryleeII///出處:L///</summary>publicinterfaceILogFormatter日E{IIstringFormat(stringMsgStr);I}編寫組件僅僅有接口還不行,還需要實現(xiàn)了上面兩個接口的具體實現(xiàn)類,這些類我們把它叫做組件。日國///<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構造函數(shù)中除了需要一個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實現(xiàn)了這個服務,這里還設置了一個key的參數(shù),后面可以通過這個參數(shù)來獲取這個服務,注冊ILog時容器會發(fā)現(xiàn)這個服務依賴于其他的服務,它會自動去尋找,如果找不到這樣的服務,則會拋出一個異常;第三步:向容器中注冊ILogFormatter并告知TextFormatter實現(xiàn)了它;第四步:容器發(fā)現(xiàn)類的構造函數(shù)還需要另外一個參數(shù)target,這里指定了到BasicUsage.xml中去查找。運行程序,可以看到輸出的結果:Output[FirstCastleIOCDemo]log.txt怎么樣?夠簡單的吧。可以看到整個過程非常的簡單,代碼也非常優(yōu)雅,我們并沒有使用new關鍵字創(chuàng)建一個具體實現(xiàn)類的實例,至此,一個簡單的使用CastleIOC的過程就完成了。下面我們來理解一下其中幾個重要的概念。幾個重要的概念1.服務服務是一個個的接口,接口約定了服務,從而使隨意替換服務的實現(xiàn)對使用接口服務的代碼沒有任何的影響。像我們上面例子中的ILog,ILogFormatter都是一個個服務,我們在這個例子中支實現(xiàn)了一個文本文件的日志記錄,如果你要是實現(xiàn)數(shù)據(jù)庫記錄的日志記錄,都必須要遵守ILog這個接口。組件簡單來說組件是一個可重用的程序單元,它實現(xiàn)了某個接口,并僅僅只實現(xiàn)了這一個良好的接口。也就是說,組件是實現(xiàn)了某個服務接口的類。像上例中的TextFileLog,TextFormatter都是組件自動裝配在上面的例子中,大家可能都已經(jīng)注意到了,TextFileLog依賴于TextFormatter,我們卻沒有在配置文件中指定它們之間的依賴關系,這就
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)信息資源共享協(xié)議合同范本
- 2025年促銷人員勞動合同格式
- 正規(guī)2025年幼兒園園長聘用合同格式
- 2025年子女撫養(yǎng)協(xié)議策劃法律要點
- 2025年企業(yè)人力資源總監(jiān)合同工協(xié)議
- 2025年養(yǎng)老機構資源整合與合作框架協(xié)議
- 銀行卡受理終端申請租賃協(xié)議2025年模板
- 2025年化妝品批發(fā)零售合同
- 2025年體育賽事票務銷售代理合同范文概述
- 2025年標準經(jīng)理雇傭合同范本
- 常見食物的嘌呤含量表匯總
- 人教版數(shù)學八年級下冊同步練習(含答案)
- SB/T 10752-2012馬鈴薯雪花全粉
- 2023年湖南高速鐵路職業(yè)技術學院高職單招(英語)試題庫含答案解析
- 濕型砂中煤粉作用及檢測全解析
- 積累運用表示動作的詞語課件
- 機動車登記證書英文證書模板
- 第8課《山山水水》教學設計(新人教版小學美術六年級上冊)
- T∕ZSQX 008-2020 建設工程全過程質(zhì)量行為導則
- 質(zhì)量管理體系基礎知識培訓-2016
- 甲醇催化劑說明書
評論
0/150
提交評論