日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Castle IOC容器与Spring.NET配置之比较

發(fā)布時間:2025/5/22 asp.net 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Castle IOC容器与Spring.NET配置之比较 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我本人對于Spring.NET并不了解,本文只是通過一個簡單的例子來比較一下兩者配置之間的區(qū)別。在Castle IOC容器中,提出了自動裝配(Auto-Wiring)的概念,即由容器自動管理組件之間的依賴關(guān)系,我們無需自己編寫XML配置文件來配置組件之間的依賴關(guān)系。在Spring.NET中也是支持自動裝配的,但是并不推薦使用,它貫穿著一種思想就是一切皆為XML配置,這是兩者之間最大的一個區(qū)別。<?XML:NAMESPACE PREFIX = O />

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

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

//出處:[url]http://terrylee.cnblogs.com[/url]

public?class?MyMainComponent
{
????MyComponent1?_com1;

????MyComponent2?_com2;

????
int?_i;

????
public?MyMainComponent(MyComponent1?com1,MyComponent2?com2,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)行組件之間的連接,配置文件如下,需要在配置文件中指定每一個對象及其它們之間的依賴,同時在配置文件中區(qū)分是構(gòu)造函數(shù)還是其他方法: <!--出處:[url]http://terrylee.cnblogs.com[/url]-->

<?xml?version="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中同樣需要配置文件,但相比之下,就簡單了很多:

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

<?xml?version="1.0"?encoding="utf-8"??>

<configuration>

????
<components>

????????
<component?id="myMainComponent">

????????????
<parameters>

????????????????
<i>1</i>

????????????
</parameters>

????????
</component>

????
</components>

</configuration>
Castle IOC中的配置并不需要指定組件之間的關(guān)聯(lián),它會自動通過Windsor來處理;我們只是配置了一個參數(shù)i,這個iMyMainComponent中的構(gòu)造函數(shù)中不存在依賴關(guān)系的那個參數(shù)。

//出處:[url]http://terrylee.cnblogs.com[/url]

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

????????container.AddComponent(?
"myMainComponent",?

????????????
typeof(MyMainComponent));

????????container.AddComponent(?
"myComponent1",?

????????????
typeof(MyComponent1));

????????container.AddComponent(?
"myComponent2",?

????????????
typeof(MyComponent2));??????????

????}

}
這樣添加組件后,WindsorContainer會自動調(diào)用MicroKernel中的ConstructorDependenciesModelInspector來處理組件的構(gòu)造函數(shù)依賴。

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

?

參考資料

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

轉(zhuǎn)載于:https://blog.51cto.com/terrylee/67681

總結(jié)

以上是生活随笔為你收集整理的Castle IOC容器与Spring.NET配置之比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。