菜鳥D曾經的一個項目使用的是Spring.Net框架,是將java的Spring框架移植到.Net平臺上來。可是它的核心思想沒有發生什麼變化,依然是——依賴注入和控制反轉。html
老規矩,說一下依賴注入和控制反轉的通用定義:
依賴注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。具體含義是:當某個角色(多是一個Java實例,調用者)須要另外一個角色(另外一個Java實例,被調用者)的協助時,在 傳統的程序設計過程當中,一般由調用者來建立被調用者的實例。但在Spring裏,建立被調用者的工做再也不由調用者來完成,所以稱爲控制反轉;建立被調用者 實例的工做一般由Spring容器來完成,而後注入調用者,所以也稱爲依賴注入。java
菜鳥D表示很精煉,可是看不太懂。幸虧,上一次大牛給我留了一些代碼,原本是給我講解委託事件的,可是其中的一些東西仍是有利於依賴注入的理解的。
簡化代碼以下:spring
public interface IFrame //定義一個接口 { void Add(); void Edit(); void Save(); } class FX操做1 : IFrame { public void Add() { MessageBox.Show("操做1"); } public void Edit() { } public void Save() { } } class FX操做2 : IFrame { public void Add() { MessageBox.Show("操做2"); } public void Edit() { } public void Save() { } } //自定義控件 public partial class FrameTwo : UserControl { public IFrame BindFrame { get; set; } public FrameTwo() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (BindFrame == null) return; BindFrame.Add(); } private void button2_Click(object sender, EventArgs e) { if (BindFrame == null) return; BindFrame.Edit(); } private void button3_Click(object sender, EventArgs e) { if (BindFrame == null) return; BindFrame.Save(); } } //主界面: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void radioButton1_Click(object sender, EventArgs e) { if (radioButton1.Checked) { this.frameTwo1.BindFrame = new FX操做1(); } else { this.frameTwo1.BindFrame = new FX操做2(); } } }
可能代碼有點亂,可是核心是最後的幾行代碼,採用接口能夠實現多態,增長了可調用方法的種類,也提升了通用性。當咱們把 new FX操做1()或者new FX操做2()放到另外一個類(工廠或者容器)中,這就是一個spring的雛形。(我的觀點,歡迎指正)代碼的原意是封裝一個擁有三個按鈕的自定義控件,咱們不知道觸發點擊事件後會發生什麼,內部沒法判斷從而沒法處理,因而將判斷的邏輯放在外部,經過接口向控件內部「注入」一個「IFrame」的實體(其實就是控件內部能夠調用外部不屬於控件的方法)。控件在依靠外部的注入,外部給他提供什麼樣的類(此例,如接口),它就執行類中相應的方法。這時,就能夠看到提供new FX操做1()或者new FX操做2()的「容器」爲控件提供了注入的功能,而控件不須要本身來建立 FX操做1()或者 FX操做2(),這就實現了控制的反轉。此例中spring(暫且如此稱呼)將控件與操做類的耦合解開了,可是spring自身與操做類又耦合上了,相較而言解開操做類和控件的耦合纔是咱們須要的。編程
菜鳥D的見解是,編程中沒有設計模式,所謂的設計模式只在作一件事——解耦。咱們解開了實體類和操做類的耦合,可是卻將操做類和工廠耦合在一塊兒,想要解開操做類和工廠的耦合,又有可能會形成新的耦合,咱們在不一樣的場景採用不一樣的解耦手段,這些手段被總結起來就叫作設計模式。設計模式
菜鳥D但願這篇白話對您有所幫助。框架
如下部分可能會對您有所幫助:
http://blog.csdn.net/taijianyu/article/details/2338311/
這篇文章的人和斧頭的例子,感受仍是很不錯的,對於依賴注入和控制反轉的核心思想的理解仍是挺有幫助的,代碼是java的,學C#的也不難看懂。
http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html
這篇文章比較深,可是不難理解,並且是層次遞進,讀起來也很容易。this