1. 程式人生 > >小敘Spring.NET(Ioc與DI)的使用步驟

小敘Spring.NET(Ioc與DI)的使用步驟

寫入 邏輯 麻煩 今天 人員 feature 屬性註入 節點 問題

那今天就介紹一下我理解的Spring.net吧。介紹Spring.NET之前,先談點其他的。我們都知道,.NET有一個基本原則“高內聚,低耦合“。關於這個概念,想必大家都知道。所謂高內聚,也就是模塊內部內聚,各個模塊之間“低耦合”。也就是結耦,降低耦合度。所以我們選取了傳統的三層,把,數據訪問層,業務邏輯層,UI層分離,降低耦合度!
但是這還不夠,我們為了讓業務邏輯層與數據訪問層徹底結耦。可以用面向接口編程的思想,采用抽象工廠模式。也就是建立工廠,采用映射的方式,使業務邏輯層與數據訪問層結耦。這 確實解決了很多問題,但是,如果讓業務邏輯層與UI層也進行結耦。我們如果仍然采用抽象工廠模式,建立工廠,信息寫入配置文件,采用映射。那豈不是很麻煩??所以,我們引出了我們今天的內容,Spring.NET.
Spring本是java的一個框架,如今,它已經完美的發展成了幾個技術的框架。Spring.NET就是一個很好的例子。那麽Spring.Net有什麽作用呢?他有著很強大的功能,就是提到的Ioc與DI。所謂Ioc,也就是創建實例,創建對象,相當於剛剛提到的抽象工廠的作用。所謂DI,就是“依賴註入”,可以給某一屬性進行賦值等。

今兒就介紹IoC(創建對象的權利由開發人員自己控制new,轉到了由容器來控制)DI(在對象初始化時可以給一些屬性,構造方法的參數等註入默認值,可以是復雜類型)的具體使用方法吧。Spring.NET的工作,都是在配置文件裏面進行的。所以,敘述,和讀起來,難免的都會費勁。
1.自然是添加程序集的引用了
這似乎是所有技術都難逃的步驟,程序集網上或者Demo裏面也都可以找到,引用上即可。
2. 配置文件內,寫入以下代碼
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="config://spring/objects"/>
</context>
<objects xmlns="http://www.springframework.net">
<description>An example that demonstrates simple IoC features.</description> </objects>
</spring>
</configuration>
3.IoC的實現
(Ioc)需要new的類,放到在<objects></objects>節點中的object節點裏面, 其中name為類名,可以隨意定義,type:前半部分為創建的類的全名,後半部分為類所在的程序集-->

<object name="UserInfoService"type="SpringNet.UserInfoService,SpringNet">

</object>
使用時使用下面代碼就可以了
IApplicationContext ctx = ContextRegistry.GetContext();
IUserInfoService lister = (IUserInfoService)ctx.GetObject("UserInfoService");
。使用時如果需要更換具體的對象,只需要在配置文件裏面改動就可以了

4.(DI的實現)給這個類加一個屬性,也可以加多個,就在object節點裏面加<property/>節點就可以了

例如:<object name="UserInfoService" type="SpringNet.UserInfoService,SpringNet">
<!--給這個類加一個屬性,也可以加多個-->
<!--屬性名字,值:直接賦值。這就為類裏面的name屬性,賦了一個值-->
<property name="name" value="誌華"/>
</object>
如果裏面有一個復雜的數據類型,比如有個person類,那麽就只用鏈接屬性註入,假如UserInfoService類有一個person類的字段。就如下面這樣註入

<object name="UserInfoService" type="SpringNet.UserInfoService,SpringNet">
<!--給這個類加一個屬性,也可以加多個-->
<!--屬性名字,值:直接賦值-->
<property name="name" value="誌華"/>

<!--指向下面的object節點-->

<property name="per" ref="Myperson"/>

</object>

<!--讓上面的ref屬性進行指向 相當於實例化一下-->

<object name="Myperson" type="SpringNet.Person,SpringNet">

<property name="Age" value="21"/>

</object>

如果調用的話,這樣就可以獲得具體的實例數據,以及屬性了。
5.到現在為止就基本算結束了,如果項目過大,我們可以采取分離的機制
在<spring>節點下的<context>節點中,如下面的屬性,就指向了另外一個xml文件。剛才的配置,就可以寫在新的文件裏面了,效果是一樣的
<resource uri="file://Service.xml"/><!--引用的地址,從bin/debug文件夾下找,所以我們得註意地址 右擊文件屬性,把 復制到輸出目錄,定義為始終復制-->

小敘Spring.NET(Ioc與DI)的使用步驟