天天看點

Ninject(一)——手動依賴注入

手工依賴注入。在原有例子的基礎上做小部分修改。

一個RPG遊戲,有武士的角色。武士為了榮耀而戰。首先要為一個武士配備一個合适的武器。

(1) 準備一件武器(Sword)

public class Sword   

{

public void Hit(string strTarget)

        Console.WriteLine("砍死{0}",strTarget);

}

(2)一個武士角色

public class Samurai

Sword _sword ;

public Samurai()

 _sword = new Sword();

public void Attack(string strTarget)

    _sword.Hit(strTarget);

(3)測試

[Test]

public void Test1()

 Samurai sam = new Samurai();

 sam.Attack("僵屍");

結果:

砍死僵屍

當一個類依賴于一個具體實作時,稱為:這個類對具體實作的類緊耦合。武士類對劍類緊耦合。當類緊耦合時,它們不能在不通知它們的實作的情況下完成自身的修改。如果要更換武器,那麼因為武士類對劍類緊耦合,那麼在修改武器的時候,還要修改對劍類緊耦合的武士本身。為了避免緊耦合的類。我們通常通過接口來提供間接的層面。

(4)接口實作

public interface IWeapon

void Hit(string target);

public class Sword : IWeapon

    Console.WriteLine("砍死{0}",strTarget);

IWeapon _Weapon;

       _Weapon = new Sword();

       _Weapon.Hit(strTarget);

現在武器可以裝備不同的武器了。但是,劍類對象仍然是在武士對象的構造器中建立的。我們仍然需要在為武士裝備另一種武器的時候還要通知武士的實作,武士類仍然對劍類緊耦合。這裡有一個簡單的解決方法。與其在武士類構造器内部建立劍類的執行個體,不如以構造參數的方式來代替。

(5)構造參數

public Samurai(IWeapon Weapon)

   _Weapon = Weapon;

   Samurai sam = new Samurai(new Sword());

   sam.Attack("僵屍");

現在,裝備武士,可以通過向武士類的構造方法向武士類注入武器(劍)。這是一個依賴注入的例子(具體來說是一個構造注入)。現在建立另一種可能用到的武器:

(6)添加武器

public class Shuriken : IWeapon

public void Hit(string target)

       Console.WriteLine("刺穿{0}的咽喉 ", target);

(7)測試

Samurai sam = new Samurai(new Sword());

Samurai sam2 = new Samurai(new Shuriken());

sam.Attack("僵屍");

sam2.Attack("僵屍");

任何時候,當要建立一個武士角色時,首先必須建立一個武器接口的實作,然後把它傳到武士的構造器中。現在修改武士武器的時候,不用再來修改這個武士類的實作了,這個武士類的程式集可以和武器類的程式集分開了。事實上,我們可以在不需要武士類源檔案的情況下添加新武器了。手動依賴注入對于小型的項目來說是個有效的政策。

部落格園大道至簡

<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>

轉載請注明:部落格園

繼續閱讀