1. 程式人生 > >C#依賴注入

C#依賴注入

依賴注入的另外一個意思便是控制反轉,也就是說將控制權交給被呼叫者。

依賴注入的用處便是減小模組化設計的耦合性,即增加可維護性。

假設我們有A,B兩個模組,B要呼叫A來實現某種功能,通常最直接的做法是將A在B中建立例項:

ps:

interface IA{

void PlayMusic();

}

public A1:IA{

public void PlayMusic(){

console.WriteLine('轟轟轟');

}

}

public A2:IA{

public void PlayMusic(){

console.WriteLine('吼吼吼');

}

}

public class B{

var a= new A1;

public void PlayMusic(){

   a.PlayMusic();

}

}

這裡有連個缺點:

缺點:A1與B的耦合性,需要播放音樂完全依賴於呼叫者B,這時假如IA有兩個子類,但是按照上面的硬編碼,B只能實現A1播放音樂的功能。

設想:如果我們將B的控制權交給被呼叫者IA,那麼B要實現的播放功能由IA的例項決定,我傳入A1的例項則播放A1的音樂,傳入A2的例項則播放A2的音樂,控制權轉交給IA,這時的耦合性降低了許多。

下面我們來看兩種依賴注入的方式:

1、建構函式注入

public class B{

public IA a;

public B(IA a){

 this.a=a;

}

public void PlayMusic(){

a.PlayMusic();

}

}

2、屬性注入

public class B{

public IA a{

get;

set;

}

public void PlayMusic(){

a.PlayMusic();

}

}

public class Main(){

B b=new B();

b.a=new A1();

b.PlayMusic();

}

以上建立的例項a都不是在B中硬編碼,而是通過外部注入到B中的,從而將具體播放音樂的功能轉移給外部注入到B中的a決定。

上面介紹的是依賴注入的概念性上的解釋,有興趣同學們可以去看spring.net資料,將依賴關係轉移到config配置檔案中,可以說是最大的程度轉移了控制權。

相關推薦

C# 依賴注入中的 控制反轉(Assembly)實現

       對於剛接觸依賴注入的人來說,什麼面向切面,反射,依賴注入等等一時不好理解,  首先,都在說控制反轉,既然有反轉那麼就會有控制正轉,相信很多網上尋找控制反轉資料中,很少有提到過正轉。 正轉也簡單,就是我們通常呼叫的

C#依賴注入控制反轉IOC實現詳解

原文: C#依賴注入控制反轉IOC實現詳解 IOC的基本概念是:不建立物件,但是描述建立它們的方式。在程式碼中不直接與物件和服務連線,但在配置檔案中描述哪一個元件需要哪一項服務。容器負責將這些聯絡在一起。 舉個例子,元件A中有類ClassA,元件B中有介面IB和其對應的實現類B1和B2。 那麼,現在Cl

C#依賴注入那些事兒(一)

1 IGame遊戲公司的故事 1.1 討論會 話說有一個叫IGame的遊戲公司,正在開發一款ARPG遊戲(動作&角色扮演類遊戲,如魔獸世界、夢幻西遊這一類的遊戲)。一般這類遊戲都有一個基本的功能,就是打怪(玩家攻擊怪物,藉此獲得經驗、虛擬貨幣和虛擬裝備

C#依賴注入

依賴注入的另外一個意思便是控制反轉,也就是說將控制權交給被呼叫者。 依賴注入的用處便是減小模組化設計的耦合性,即增加可維護性。 假設我們有A,B兩個模組,B要呼叫A來實現某種功能,通常最直接的做法是將A在B中建立例項: ps: interface IA{ voi

C#依賴注入例項解析

1.5 實現依賴注入1.5.1 背景介紹 設計模式中,尤其是結構型模式很多時候解決的就是物件間的依賴關係,變依賴具體為依賴抽象。平時開發中如果發現客戶程式依賴某個(或某類)物件,我們常常會對它們進行一次抽象,形成抽象的抽象類、介面,這樣客戶程式就

C# 依賴注入

依賴注入 1. 什麼是依賴注入    我們建立一個SkiCardController需要應用程式中的一些其他服務才能處理檢視,建立和編輯的請求。具體來說,他用SkiCardContext訪問資料,用UserManager訪問當前使用者的資訊,用IAuthorizationService檢查當前使用者是否有許可

依賴注入C#)

一,依賴注入(Dependency Injection,簡稱DI) 設計模式中,尤其是結構型模式很多時候解決的就是物件間的依賴關係,變依賴關係具體為依賴具象。平時開發中如果發現客戶程式依賴某個(或某類)物件,我們常常會對它們進行一次抽象,形成抽象的抽象

從零開始寫C# MVC框架之--- 用autofac ioc 容器實現依賴注入

本章查找了一篇對依賴注入解釋得非常不錯的文章為基礎,再加上自己的理解,不然還真不好用語言的方式表達清楚,引用下面這位仁兄的文章 依賴注入產生的背景:         隨著面向物件分析與設計的發展,一個良好的設計,核心原則之一就是將變化隔離,使得變化部分發生變化時,不變部

如何用C#實現依賴注入

1. 問題的提出 開發中,尤其是大型專案的開發中,為了降低模組間、類間的耦合關係,比較提倡基於介面開發,但在實現中也必須面臨最終是“誰”提供實體類的問題。Martin Fowler在《Inversion of Control Containers and the Dependency Injection pa

C#:在Task中使用依賴注入的Service/EFContext

dotnet core時代,依賴注入基本已經成為標配了,這就不多說了.前幾天在做某個功能的時候遇

依賴倒置原則(DIP)、控制反轉(IoC)、依賴注入(DI)(C#)

理解: 依賴倒置原則(DIP)主程式要依賴於抽象介面,不要依賴於具體實現。高層模組不應該依賴底層模組,兩個都應該以來抽象。抽象不應該依賴細節,細節應該依賴抽象。(具體看我上一篇貼子) 依賴倒置原則是六大設計原則中的一種,它的大致意思是所有模組都應該依賴於抽象,而不是直接依賴於另一個模組。依賴倒置原則僅僅只是一

C#反射與特性(六):設計一個仿ASP.NETCore依賴注入Web

目錄 1,編寫依賴注入框架 1.1 路由索引 1.2 依賴例項化 1.3 例項化型別、依賴注入、呼叫方法 2,編寫控制器和引數型別 2.1 編寫型別

C#掃盲篇(二)依賴倒置•控制反轉•依賴注入•面向介面程式設計--滿腹經綸的說

 掃盲系列的文章收到了廣大粉絲朋友的支援,十分感謝,你們的支援就是我最大動力。 我的掃盲系列還會繼續輸出,本人也是一線碼農,有什麼問題大家可以一起討論。也可以私信或者留言您想要了解的知識點,我們一起進步,共同向著高階進發。 掃盲系列文章都是圍繞著下圖知識點來做的,後續還會出一些從基礎到進階系列的Co

c# 依賴註入之---反射(轉)

cti args adl factor ninject button his eal nodes 詳細請看http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 定義一個接口,和兩個類(實現該接口) IB

C# 依賴同一個強簽名程序集的不同版本

屬性 key nbsp .net codebase 方案 com .config sse 最近遇到一個問題就是要在同一個項目中同時使用Newtonsoft.Json.dll的不同版本。在網上搜索了下解決方案,基本都是在app.config或web.config中進行設

SpringFramework的核心:IOC容器的實現------IoC容器的依賴注入

如果IoC容器已經載入了使用者定義的Bean資訊,並開始分析依賴注入的原理。依賴注入是使用者第一次向IoC容器索要Bean時觸發的,當然也有例外。如果我們設定了lazy-init的屬性。是可以在剛開始初始化容器的時候就為我們生成新的bean。 首先我們從DefaultListableBean

Asp.net MVC中如何實現依賴注入(DI)(二)

昨天說了一下Castle與Autofac如何在MVC中的使用,今天再來簡單說一下Spring.Net框架在MVC中如何依賴注入的。 官網:http://www.springframework.net/ 專案結構圖:   首先,我們要在專案中新增Spring.Net的類庫引用,我們可以在N

淺談依賴注入

轉載自部落格園一位前輩寫的很不錯的文章 作者: yangecnu(yangecnu’s Blog on 部落格園) 出處:http://www.cnblogs.com/yangecnu/ 淺談依賴注入 最近幾天在看一本名為Dependency Injection in .NET

Spring 學習筆記 - IOC/依賴注入

簡述: Spring 學習 - IOC/依賴注入 1. Bean 的例項化 1) 直接使用原始類建立bean <bean id="exampleBean" class="com.anialy.test.ExampleBean" /> 2) 使用工廠方法建立

PHP 控制反轉與依賴注入詳細分析與程式碼實現

PHP有很多的設計模式,比如單例模式,訂閱模式,策略模式,工廠模式,觀察者模式,這些設計模式其實無非都是為了讓程式簡化,容易維護,模組間解耦。現在我們來講講PHP的另外一種設計模式,控制反轉/依賴注入,這兩者其實是同一個概念,只是凶不同的角度去解釋的而已。 依賴注入:是從需要實現的業務邏輯上面去