Castle.Net 基本應用


什么是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();
        }

運行結果:

1

補充

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使用,想必會非常強大..


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM