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
{
public void Hit(string strTarget)
{
Console.WriteLine("砍死{0}",strTarget);
}
}
public class Samurai
{
IWeapon _Weapon;
public Samurai()
{
_Weapon = new Sword();
}
public void Attack(string strTarget)
{
_Weapon.Hit(strTarget);
}
}
現在武器可以裝備不同的武器了。但是,劍類物件仍然是在武士物件的構造器中建立的。我們仍然需要在為武士裝備另一種武器的時候還要通知武士的實現,武士類仍然對劍類緊耦合。這裡有一個簡單的解決方法。與其在武士類構造器內部建立劍類的例項,不如以構造引數的方式來代替。
(5)構造引數
public Samurai(IWeapon Weapon)
{
_Weapon = Weapon;
}
public void Test1()
{
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("殭屍");
任何時候,當要建立一個武士角色時,首先必須建立一個武器介面的實現,然後把它傳到武士的構造器中。現在修改武士武器的時候,不用再來修改這個武士類的實現了,這個武士類的程式集可以和武器類的程式集分開了。事實上,我們可以在不需要武士類原始檔的情況下新增新武器了。手動依賴注入對於小型的專案來說是個有效的策略。
相關文章
- [ASP.NET MVC 小牛之路]04 - 依賴注入(DI)和NinjectASP.NETMVC依賴注入
- 動手實現你的依賴注入依賴注入
- angular依賴注入Angular依賴注入
- XUnit 依賴注入依賴注入
- Struts 依賴注入依賴注入
- 依賴倒置(DIP)與依賴注入(DI)依賴注入
- 依賴注入?依賴注入是如何實現解耦的?依賴注入解耦
- ASP.NET Core中的依賴注入(2):依賴注入(DI)ASP.NET依賴注入
- 手寫Spring---DI依賴注入(2)Spring依賴注入
- ASP.NET Core - 依賴注入(一)ASP.NET依賴注入
- [譯] 依賴注入?? 哈??依賴注入
- Angular 依賴注入原理Angular依賴注入
- .Net Core — 依賴注入依賴注入
- 理解 Angular 依賴注入Angular依賴注入
- Spring依賴注入Spring依賴注入
- Spring依賴注入---Spring依賴注入
- 依賴注入系列教程依賴注入
- 我看依賴注入依賴注入
- webapi - 使用依賴注入WebAPI依賴注入
- 依賴注入是否值得?依賴注入
- Spring系列第八講 依賴注入之手動注入Spring依賴注入
- 【翻譯】 Guice 動機——依賴注入的動機GUI依賴注入
- [iOS]一次高效的依賴注入iOS依賴注入
- Asp .Net Core 依賴注入依賴注入
- Spring IOC——依賴注入Spring依賴注入
- 入門系列-依賴注入依賴注入
- C# 依賴注入 & MEFC#依賴注入
- Spring 依賴注入 DISpring依賴注入
- 關於依賴注入(typescript)依賴注入TypeScript
- 什麼是依賴注入依賴注入
- .NET8 依賴注入依賴注入
- spring 的依賴注入Spring依賴注入
- 深入淺出依賴注入依賴注入
- C# Unity依賴注入C#Unity依賴注入
- JavaScript裡的依賴注入JavaScript依賴注入
- 依賴注入那些事兒依賴注入
- iOS實現依賴注入iOS依賴注入
- Guice指南-手工依賴注入GUI依賴注入