asp.net中控制反轉(zhuǎn)怎么理解?_.Net教程
推薦:delphi選擇文件夾例子所需單元 示例代碼
對(duì)IOC的解釋為:“Inversion of control is a common characteristic of frameworks, so saying that these lightweight containers are special because they use inversion of control is like saying my car is special because it has wheels.”
我想對(duì)這一概念執(zhí)行 一個(gè)個(gè)人的闡述,以方便我的理解。控制反轉(zhuǎn),從字面意思來(lái)看, 就是控制權(quán)由被動(dòng)變主動(dòng)又變?yōu)楸粍?dòng),或被動(dòng)變主動(dòng)又變?yōu)楸粍?dòng)。從這個(gè)角度來(lái)說(shuō),IOC就變得非常容易理解了。
舉個(gè)例子:你的主管要求你做一件事情,這個(gè)時(shí)候就存在這么多個(gè) 流程 ,主管命令你做事情(這個(gè)時(shí)候主動(dòng)權(quán)在主管,你是被動(dòng)的)
你接到命令做事情(這個(gè)時(shí)候主題是你,你是主動(dòng)的,控制權(quán)在你手里) 你完成事情(這個(gè)時(shí)候主題依然是你,控制權(quán)在你手里)
報(bào)告主管做完事情(主動(dòng)權(quán)又叫交到主管手里了)
上面的整個(gè)流程 就完成了一次IOC,從上面可以看出,IOC的基本思想是控制權(quán)的轉(zhuǎn)換流程 。
舉個(gè)代碼的例子:
假如有Class A,Class B,在A內(nèi)部會(huì)原始化一個(gè)B,調(diào)用B的一個(gè)要領(lǐng)
DoMethod public Class B
{
public void DoMethod()
{
/// do somthing;
}
}
public Class A
{
public void Excute()
{
B b = new B();
b.DoMethod();
}
}
假如在Main函數(shù)中如下執(zhí)行: A a = new A(); a.Excute();
從這兩行代碼來(lái)看,事實(shí)上也存在一個(gè)IOC的流程 ,a——>b——>a,理解的關(guān)鍵點(diǎn)就在在A的內(nèi)部調(diào)用Excute的時(shí)候, 要領(lǐng) b.DoMethod的執(zhí)行。 理解了IOC,我們?cè)倏匆幌翫I, 從上面A調(diào)用B我們可以看出, 在原始化一個(gè)A的實(shí)例時(shí),也必須實(shí)例化一個(gè)B,也就是說(shuō)如果沒(méi)有B或者B出了疑問(wèn) , A就不能 實(shí)例化,這就產(chǎn)生了一種依賴(lài),就是A依賴(lài)B, 這種依賴(lài)從設(shè)計(jì)的角度來(lái)說(shuō)就是耦合,顯然它是不能 滿(mǎn)足高內(nèi)聚低耦合的要求的。這個(gè)時(shí)候就須要 解耦, 當(dāng)然解耦有很多種要領(lǐng) , 而DI就是其中一種。不管任何一種解耦要領(lǐng) ,都不是說(shuō)使A和B完全沒(méi)有聯(lián)系 , 而是把這種聯(lián)系 的實(shí)現(xiàn)變得隱晦,不那么直接,但是又很容易實(shí)現(xiàn), 而且易于擴(kuò)展,不像上面的代碼那樣,直接new一個(gè)B出來(lái)。那為什么我們總是把IOC和DI聯(lián)系到一起呢? 是因?yàn)镈I的基本思想就是IOC,而體現(xiàn)IOC 思想的要領(lǐng) 還有另外一個(gè),那就是Service Locator,這個(gè)要領(lǐng) 好像涉及到的很少。其實(shí)這些都是從java里面衍生出來(lái)的,雖然本人已經(jīng)好幾年沒(méi)用java,里面Spring這些都會(huì)用到IOC、DI好像他們是緊密連接在一塊的。
分享:asp.net中C++單例實(shí)現(xiàn)問(wèn)題分析方案一 這是最簡(jiǎn)單的版本,在單線程下(或者是C++0X下)是沒(méi)任何問(wèn)題的,但在多線程下就不行了,因?yàn)閟tatic QMManager instance_;這句話不是線程安全的。 在局部作用域下的靜態(tài)變量在編譯時(shí),編譯器會(huì)創(chuàng)建一個(gè)附加變量標(biāo)識(shí)靜態(tài)變量是否被初始化,會(huì)被編譯器變成像下面這
- delphi選擇文件夾例子
- asp.net中C++單例實(shí)現(xiàn)問(wèn)題分析
- 簡(jiǎn)單理解Web Service三種實(shí)現(xiàn)方式
- Asp.net中Ajax與JQuery的ready函數(shù)沖突怎么辦
- asp.net中Repeater控件用法筆記
- asp.net中導(dǎo)出excel數(shù)據(jù)的方法匯總
- Asp.Net 上傳圖片并生成高清晰縮略圖
- 服務(wù)器安全狗導(dǎo)致ASP.NET網(wǎng)站運(yùn)行出錯(cuò)的一個(gè)案例
- Asp.Net其他頁(yè)面如何調(diào)用Web用戶(hù)控件寫(xiě)的分頁(yè)
- ASP.NET中上傳并讀取Excel文件數(shù)據(jù)示例
- asp.net SqlParameter如何根據(jù)條件有選擇的添加參數(shù)
- asp.net Xml綁定到數(shù)據(jù)控件的具體實(shí)現(xiàn)
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 解決asp.net訪問(wèn)IIS元數(shù)據(jù)庫(kù)失敗的方法
- 如何使用.Net C#開(kāi)發(fā)批量ACCESS數(shù)據(jù)庫(kù)壓縮軟件
- 解析利用wsdl.exe生成webservice代理類(lèi)的詳解
- 基于Asp.Net MVC4 Bundle捆綁壓縮技術(shù)的介紹
- 淺談ASP.NET中如何使用AJAX中的方式
- 三層架構(gòu)各層間的訪問(wèn)過(guò)程
- String.Empty、NULL、“”的不同之處
- 解決ASP.NET中讓網(wǎng)頁(yè)彈出窗口的問(wèn)題
- 解析ASP.NET WebForm頁(yè)面內(nèi)容輸出方式
- .NET 線程基礎(chǔ)的使用介紹
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-asp.net中控制反轉(zhuǎn)怎么理解?
。