黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 2540 0

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

關(guān)于自動(dòng)裝配,來(lái)自于 Spring.NET 的支持者認(rèn)為讓容器自動(dòng)管理,會(huì)讓我們無(wú)法控制組件的依賴關(guān)系,如果該為 XML 配置,可以讓我們知道自己在做什么,我們指定了哪些依賴關(guān)系,方便進(jìn)行控制和管理;而來(lái)自于 Castle IOC 的支持者認(rèn)為如果不讓容器自動(dòng)管理,手工配置會(huì)變得非常之復(fù)雜,配置文件也會(huì)變得非常繁冗,如果系統(tǒng)中的組件非常之多的時(shí)候,管理工作會(huì)變得很困難。

我們來(lái)看一個(gè)簡(jiǎn)單的例子,有這樣一個(gè)組件 MyMainComponent ,它依賴于 MyComponent1 MyComponent2 ,并且它在構(gòu)造函數(shù)中還需要接收一個(gè)整型的參數(shù)。

// 出處: 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 進(jìn)行組件之間的連接,配置文件如下,需要在配置文件中指定每一個(gè)對(duì)象及其它們之間的依賴,同時(shí)在配置文件中區(qū)分是構(gòu)造函數(shù)還是其他方法:

<!-- 出處: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 中同樣需要配置文件,但相比之下,就簡(jiǎn)單了很多:

<!-- 出處: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 中的配置并不需要指定組件之間的關(guān)聯(lián),它會(huì)自動(dòng)通過(guò) Windsor 來(lái)處理;我們只是配置了一個(gè)參數(shù) i ,這個(gè) i MyMainComponent 中的構(gòu)造函數(shù)中不存在依賴關(guān)系的那個(gè)參數(shù)。

// 出處: 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 會(huì)自動(dòng)調(diào)用 MicroKernel 中的 ConstructorDependenciesModelInspector 來(lái)處理組件的構(gòu)造函數(shù)依賴。

通過(guò)上面的這個(gè)簡(jiǎn)單例子比較可以看出,如果我們想要增加一個(gè)組件之間的依賴關(guān)系或者增加一個(gè)組件使用 Castle 要比使用 Spring.NET 容易很多, Spring.NET 復(fù)雜的配置文件會(huì)給我們開(kāi)發(fā)帶來(lái)很來(lái)不可預(yù)料的錯(cuò)誤; Castle 根據(jù)對(duì)象的依賴關(guān)系,采用自動(dòng)裝配,不需要配置組件的依賴,另外為了符合構(gòu)造注入和屬性注入, Castle 的配置文件并沒(méi)有像 Spring.Net 那樣區(qū)分構(gòu)造函數(shù)還是其他的方法,同時(shí)直接使用 Parameters ,而不是使用構(gòu)造函數(shù)參數(shù)之類的區(qū)分。

參考資料

Castle 的官方網(wǎng)站 http://www.castleproject.org

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論