亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Castle IOC容器與Spring.NET配置之比較

系統 1963 0

我本人對于 Spring.NET 并不了解,本文只是通過一個簡單的例子來比較一下兩者配置之間的區別。在 Castle IOC 容器中,提出了自動裝配( Auto-Wiring )的概念,即由容器自動管理組件之間的依賴關系,我們無需自己編寫 XML 配置文件來配置組件之間的依賴關系。在 Spring.NET 中也是支持自動裝配的,但是并不推薦使用,它貫穿著一種思想就是一切皆為 XML 配置,這是兩者之間最大的一個區別。

關于自動裝配,來自于 Spring.NET 的支持者認為讓容器自動管理,會讓我們無法控制組件的依賴關系,如果該為 XML 配置,可以讓我們知道自己在做什么,我們指定了哪些依賴關系,方便進行控制和管理;而來自于 Castle IOC 的支持者認為如果不讓容器自動管理,手工配置會變得非常之復雜,配置文件也會變得非常繁冗,如果系統中的組件非常之多的時候,管理工作會變得很困難。

我們來看一個簡單的例子,有這樣一個組件 MyMainComponent ,它依賴于 MyComponent1 、 MyComponent2 ,并且它在構造函數中還需要接收一個整型的參數。

// 出處: http://terrylee.cnblogs.com

public class MyMainComponent
{
MyComponent1_com1;

MyComponent2_com2;

int _i;

public MyMainComponent(MyComponent1com1,MyComponent2com2, int i)
{
this ._com1 = com1;

this ._com2 = com2;

this ._i = i;
}

}


public class MyComponent1
{
public MyComponent1()
{
//
}

}


public class MyComponent2
{
public MyComponent2()
{
//
}

}


如果用采用 Spring.NET ,它采用 XML 進行組件之間的連接,配置文件如下,需要在配置文件中指定每一個對象及其它們之間的依賴,同時在配置文件中區分是構造函數還是其他方法:

<!-- 出處:http://terrylee.cnblogs.com -->

<? xmlversion="1.0"encoding="utf-8" ?>

< configuration >

< object id ="myManComponent" class ="CastleDemo.MyMainComponent,CastleDemo" >

< constructor-arg >

< ref object ="mycomponent1" />

</ constructor-arg >

< constructor-arg >

< ref object ="mycomponent2" />

</ constructor-arg >

< constructor-arg >

< value > 1 </ value >

</ constructor-arg >

</ object >

< object id ="mycomponent1" class ="CastleDemo.MyComponent1,CastleDemo" />

< object id ="mycomponent2" class ="CastleDemo.MyComponent2,CastleDemo" />

</ configuration >


Castle IOC 中同樣需要配置文件,但相比之下,就簡單了很多:

<!-- 出處:http://terrylee.cnblogs.com -->

<? xmlversion="1.0"encoding="utf-8" ?>

< configuration >

< components >

< component id ="myMainComponent" >

< parameters >

< i > 1 </ i >

</ parameters >

</ component >

</ components >

</ configuration >


Castle IOC 中的配置并不需要指定組件之間的關聯,它會自動通過 Windsor 來處理;我們只是配置了一個參數 i ,這個 i MyMainComponent 中的構造函數中不存在依賴關系的那個參數。

// 出處: http://terrylee.cnblogs.com

public class App
{
public static void Main()
{
IWindsorContainercontainer
= new WindsorContainer( new XmlInterpreter( " ../../BasicUsage.xml " ));

container.AddComponent(
" myMainComponent " ,

typeof (MyMainComponent));

container.AddComponent(
" myComponent1 " ,

typeof (MyComponent1));

container.AddComponent(
" myComponent2 " ,

typeof (MyComponent2));

}

}

這樣添加組件后,

WindsorContainer 會自動調用 MicroKernel 中的 ConstructorDependenciesModelInspector 來處理組件的構造函數依賴。

通過上面的這個簡單例子比較可以看出,如果我們想要增加一個組件之間的依賴關系或者增加一個組件使用 Castle 要比使用 Spring.NET 容易很多, Spring.NET 復雜的配置文件會給我們開發帶來很來不可預料的錯誤; Castle 根據對象的依賴關系,采用自動裝配,不需要配置組件的依賴,另外為了符合構造注入和屬性注入, Castle 的配置文件并沒有像 Spring.Net 那樣區分構造函數還是其他的方法,同時直接使用 Parameters ,而不是使用構造函數參數之類的區分。

參考資料

Castle 的官方網站 http://www.castleproject.org

Castle IOC容器與Spring.NET配置之比較


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99精品视频免费观看 | 欧美怡红院免费全部视频 | 欧美日韩在大午夜爽爽影院 | 999视频在线播放777 | 九九热精品视频在线观看 | 国产一级毛片午夜 | 欧美福利视频在线 | www天天操| 久久亚洲精品国产精品婷婷 | www.射射射| 久久香蕉国产线看观看8青草 | 欧美一级特黄特黄毛片 | 人人爽天天爽夜夜爽qc | 日日摸夜夜嗷嗷叫日日拍 | 亚洲一区二区三区久久久久 | 国产精品玖玖玖影院 | 综合激情网站 | 国产成人精品2021欧美日韩 | 久久www免费人成_看 | 久久香蕉国产线看观看网站 | 国产在线观看一区二区三区 | 玖玖在线资源 | 高清一级做a爱过程免费视频 | 天堂成人在线视频 | 99国产精品久久久久久久... | 性xxxxxx| 国产成人无精品久久久 | 欧美国产日韩在线播放 | 成人久久久精品乱码一区二区三区 | 亚洲精品www久久久久久 | 国产线路一 | 日韩欧美在线中文字幕 | 国产亚洲日本人在线观看 | 福利视频在线免费观看 | 国产探花视频在线观看 | 国产毛片a级 | 久久久精品国产免费观看同学 | 四虎永久在线精品国产免费 | 亚洲成人免费 | 福利视频第一页 | 国产区视频在线 |