|
寫在前面的話
昨天在博客園上看到一篇博文,名為“什么是依賴注入?(來聽一個笑話)”[點擊這里訪問]。可以看出,作者是想以一種輕松幽默的方式對依賴注入的思想進行一個闡述。不過在讀完文章后,個人覺得文章過于淺薄,沒有真正將依賴注入的思想解釋清楚,也沒有深入的分析和具體的示例,所用比喻也有點低俗(至少筆者讀完文章后覺得胃里不是很舒服)。
但是,這篇博文啟發(fā)了我。回想自己平常的學(xué)習(xí)和工作,依賴注入確實是軟件架構(gòu)和開發(fā)中一個十分重要的概念和技術(shù),筆者參與的幾乎每一個項目都用到了它,并且得到了很好的效果。于是,筆者萌發(fā)了寫這篇文章的想法,意在將依賴注入這項概念本身結(jié)合筆者的實踐經(jīng)驗及所感所想,做一個相對完整的綜述,并總結(jié)于此文。一來可以和朋友們分享這項技術(shù)及個人心得,二來也是自己對這項技術(shù)做的一個總結(jié)。
目錄
寫在前面的話
目錄
1 IGame游戲公司的故事
1.1 討論會
1.2 實習(xí)生小李的實現(xiàn)方法
1.3 架構(gòu)師的建議
1.4 小李的小結(jié)
2 探究依賴注入
2.1 故事的啟迪
2.2 正式定義依賴注入
3 依賴注入那些事兒
3.1 依賴注入的類別
3.1.1 Setter注入
3.1.2 Construtor注入
3.1.3 依賴獲取
3.2 反射與依賴注入
3.3 多態(tài)的活性與依賴注入
3.3.1 多態(tài)性的活性
3.3.2 不同活性多態(tài)性依賴注入的選擇
4 IoC Container
4.1 IoC Container出現(xiàn)的必然性
4.2 IoC Container的分類
4.2.1 高侵入度IoC Container
4.2.2 低侵入度IoC Container
4.3 .NET平臺上典型IoC Container推介
4.3.1 Spring.NET
4.3.2 Unity
參考文獻
1 IGame游戲公司的故事
1.1 討論會
話說有一個叫IGame的游戲公司,正在開發(fā)一款A(yù)RPG游戲(動作&角色扮演類游戲,如魔獸世界、夢幻西游這一類的游戲)。一般這類游戲都有一個基本的功能,就是打怪(玩家攻擊怪物,借此獲得經(jīng)驗、虛擬貨幣和虛擬裝備),并且根據(jù)玩家角色所裝備的武器不同,攻擊效果也不同。這天,IGame公司的開發(fā)小組正在開會對打怪功能中的某一個功能點如何實現(xiàn)進行討論,他們面前的大屏幕上是這樣一份需求描述的ppt:
圖1.1 需求描述ppt
各個開發(fā)人員,面對這份需求,展開了熱烈的討論,下面我們看看討論會上都發(fā)生了什么。
1.2 實習(xí)生小李的實現(xiàn)方式
在經(jīng)過一番討論后,項目組長Peter覺得有必要整理一下各方的意見,他首先詢問小李的看法。小李是某學(xué)校計算機系大三學(xué)生,對游戲開發(fā)特別感興趣,目前是IGame公司的一名實習(xí)生。
經(jīng)過短暫的思考,小李闡述了自己的意見:
“我認(rèn)為,這個需求可以這么實現(xiàn)。HP當(dāng)然是怪物的一個屬性成員,而武器是角色的一個屬性成員,類型可以使字符串,用于描述目前角色所裝備的武器。角色類有一個攻擊方法,以被攻擊怪物為參數(shù),當(dāng)實施一次攻擊時,攻擊方法被調(diào)用,而這個方法首先判斷當(dāng)前角色裝備了什么武器,然后據(jù)此對被攻擊怪物的HP進行操作,以產(chǎn)生不同效果。”
而在闡述完后,小李也飛快的在自己的電腦上寫了一個Demo,來演示他的想法,Demo代碼如下。
Code:怪物
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5:
6: namespace IGameLi
7: {
8: ///
9: /// 怪物
10: ///
11: internal sealed class Monster
12: {
13: ///
14: /// 怪物的名字
15: ///
16: public String Name { get; set; }
17:
18: ///
19: /// 怪物的生命值
20: ///
21: public Int32 HP { get; set; }
22:
23: public Monster(String name,Int32 hp)
24: {
25: this.Name = name;
26: this.HP = hp;
27: }
28: }
29: }
it知識庫:依賴注入那些事兒,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。