什么是Castle
Castle是針對.NET平台的一個開源項目,從數據訪問框架ORM到IOC容器,再到WEB層的MVC框架、AOP,基本包括了整個開發過程中的所有東西,為我們快速的構建企業級的應用程序提供了很好的服務。
官方網站:http://www.castleproject.org/
提到Castle就不得不說說IOC容器.
IOC容器
IOC(Inversion of Control,反轉控制)是一種面向對象設計原則, 是面向對象領域新興的編程思想 。其原理是組件本身並不與其他組件建立直接的依賴關系,依賴關系將在組件之外的某個地方建立。這樣做主要是為了解耦類之間的關系,使得類更加容易測試、重 用,系統更加容易組裝和配置。這些先進技術極大促進了軟件開發的發展。
還有一種解釋:控制反轉意味着在系統開發過程中,設計的類將交由容器去控制,而不是在類的內部去控制,類與類之間的關系將交由容器處理,一個類在需 要調用另一個類時,只要調用另一個類在容器中注冊的名字就可以得到這個類的實例,與傳統的編程方式有了很大的不同,”不用你找,我來提供給你”,這就是控 制反轉的含義.
其實說明白了, 反轉控制就是依賴注入,兩者概念一樣.最終目標是都是為了降低系統的耦合關系.
Castle.Net簡單應用
說是簡單應用,就不對一些特殊操作做出解釋啦,具體的系列文章可以看看TerryLee 的Castle.net系列文章.不過就是版本舊了點.
我下載的是Castle.Windsor.2.5.3.可以到官網上去下載.
此例來做一個發送消息的簡單例子.來學習Castle.
首先建立兩個接口,一個發送消息接口ISend,一個信息內容格式接口IMessage,這里可以形象的把接口當成服務來看.
namespace CastleNetDem2.Container
{public interface ISend
{void Send(string Sendform, string SendTo, string Message);
}}namespace CastleNetDem2.Container
{public interface IMessage
{string FormMessage(string message);
}}然后建立實現了這倆個服務的組件,即實現類.
namespace CastleNetDem2.Components
{public class MessagePro : IMessage
{public string FormMessage(string message)
{return "[" + message + "]";
}}}namespace CastleNetDem2.Components
{public class SendPro : ISend
{public SendPro() { }
private IMessage _msgObj;
public SendPro(IMessage msg)
{this._msgObj = msg;
}public void Send(string Sendform, string SendTo, string Message)
{Console.WriteLine("{0}發送給{1}消息:{2}", Sendform, SendTo, _msgObj.FormMessage(Message));
}}}下面最重要的就是編寫配置文件,
<configSections>
<section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>
</configSections>
<castle>
<components>
<component id="Container.SendPro" service="CastleNetDem2.Container.ISend, CastleNetDem2"
type="CastleNetDem2.Components.SendPro, CastleNetDem2">
<parameters>
<msg>${Message}</msg>
</parameters>
</component>
<component id="Message" service="CastleNetDem2.Container.IMessage, CastleNetDem2"
type="CastleNetDem2.Components.MessagePro, CastleNetDem2"/>
</components>
</castle>
這里需要注意SendPro的構造注入需要傳入一個Message對象.用${}來引入.
測試:
static void Main(string[] args)
{//容器
IWindsorContainer container = new WindsorContainer(new XmlInterpreter());
ISend send = container.GetService<ISend>();send.Send("MisYan", "MisJia", "我到家了.");
Console.ReadKey();}運行結果:
補充
component節點的parameters類型說明:
更具體的說明請訪問:http://www.cnblogs.com/Terrylee/archive/2006/04/24/383196.html
Castle.Windsor.2.5.3 需要引入的 DLL文件Castle.Core.dll,Castle.Windsor.dll
總結
其實注入就是不用去手動的實例化你的對象,而由容器幫你完成這一系列的操作.用IBatis.Net結合Castle使用,想必會非常強大..