国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - .NET IoC模式依賴反轉(zhuǎn)(DIP)、控制反轉(zhuǎn)(Ioc)、依賴注入(DI)

.NET IoC模式依賴反轉(zhuǎn)(DIP)、控制反轉(zhuǎn)(Ioc)、依賴注入(DI)

2020-07-02 15:26HueiFeng ASP.NET教程

這篇文章主要介紹了.NET IoC模式依賴反轉(zhuǎn)(DIP)、控制反轉(zhuǎn)(Ioc)、依賴注入(DI),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

依賴倒置原則(DIP)

依賴倒置(Dependency Inversion Principle,縮寫DIP)是面向?qū)ο罅蠡驹瓌t之一。他是指一種特定的的解耦形式,使得高層次的模塊不依賴低層次的模塊的實現(xiàn)細節(jié),依賴關(guān)系被顛倒(反轉(zhuǎn)),從而使得低層次模塊依賴于高層次模塊的需求抽象.

該原則規(guī)定:

  • 高層次的模塊不應(yīng)該依賴低層次模塊,二者都應(yīng)該依賴其抽象接口.
  • 抽象接口不應(yīng)該依賴于具體實現(xiàn),而具體實現(xiàn)則應(yīng)該依賴于抽象接口.

通過如下一個簡單的示例,我們來看一下,我們通過一個簡單地下單流程向我們的用戶發(fā)送相關(guān)的短信或者郵件.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public SendingEmail
{
 public void Send(string message){
  //do something
 }
}
 
public Ordering
{
 SendingEmail _sendingEmail=null;
 public void Order(string message){
  //Order business operation
  if(_sendingEmail == null)
  {
   _sendingEmail=new SendingEmail();
  }
  _sendingEmail.Send(message);
 }
}

這樣看我們的代碼沒問題,目前只要我們完成了訂單操作那么,那么則會觸發(fā)發(fā)送功能,但是他卻違反了DIP,因為Ordering類依賴于SendingEmail類,而SendingEmail類不是抽象類,而是一個具體的類.那我們再來想一個如果這時候業(yè)務(wù)口的人過來向我們提出了一個新的需求,要求我們改為短信而不是Email,那么我們需要怎么改?

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class SendingSMS
{
 public void Send(string message){
  //do something
 }
}
public Ordering
{
 SendingEmail _sendingEmail=null;
 SendingSMS _sendingSMS=null;
 bool isSendingSMS=true;
 public void Order(string message){
  //Order business operation
  if(isSendingSMS){
   if(_sendingSMS == null)
   {
    _sendingSMS=new SendingSMS();
   }
   _sendingSMS.Send(message);
  }else{
   if(_sendingEmail == null)
   {
    _sendingEmail=new SendingEmail();
   }
   _sendingEmail.Send(message);
  }
  
 }
}

根據(jù)上述需求我們不得不創(chuàng)建更多的類,并且在Ordering類中聲明他,最后我們還需要使用IF ELSE語句來決定使用SMS還是使用電子郵件.但是當(dāng)我們有更多這種處理操作后,那么可能比現(xiàn)在還混亂,這就意味著我們必須在Ordering類中聲明更多新的具體類的實例.

我們需要抽離出來一種方式,讓高級模塊去依賴于抽象,用它來代替我們實現(xiàn)類,該抽象將映射到實現(xiàn)類.

控制反轉(zhuǎn)(IoC)

控制反轉(zhuǎn)(Inversion of Control,縮寫為IOC)是面向?qū)ο笾械脑O(shè)計原則,他可以幫助我們使高層模塊依賴于抽象,而不是底層模塊的具體實現(xiàn).換句話說,他有助于實現(xiàn)(依賴倒置原則——DIP).

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public interface ICustomerCommunication
{
 void Send(string message);
}
然后我們修改SendingEmail和SendingSMS類以從ICustomerCommunication接口繼承.
 
public class SendingEmail:ICustomerCommunication
{
 public void Send(string message){
  //do something
 }
}
 
public class SendingSMS:ICustomerCommunication
{
 public void Send(string message){
  //do something
 }
}

我們再來修改一下Ordering類以使用該抽象接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public Ordering
{
 ICustomerCommunication _customerComm=null;
 bool isSendingSMS=true;
 public void Order(string message){
  //Order business operation
  if(isSendingSMS){
   if(_customerComm == null)
   {
    _customerComm=new SendingSMS();
   }
   _customerComm.Send(message);
  }else{
   if(_customerComm == null)
   {
    _customerComm=new SendingEmail();
   }
   _customerComm.Send(message);
  }
  
 }
}

通過如上修改我們做的控制反轉(zhuǎn)更符合DIP.現(xiàn)在我們的高級模塊只需要依賴于抽象,而不用去依賴實現(xiàn).

依賴注入(DI)

依賴注入(Depeondency Injection,縮寫為DI)是實現(xiàn)控制反轉(zhuǎn)的一種方式.常用的依賴注入方法有3種:

  • 構(gòu)造函數(shù)注入
  • 方法注入
  • 屬性注入

雖然說通過上面代碼我們實現(xiàn)了IoC,并且Ordering類依賴于ICustomerCommunication抽象,但我們?nèi)匀辉贠rdering類中使用了實現(xiàn)類,這使用我們無法在類于類之間完全解耦.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
if(isSendingSMS){
if(_customerComm == null)
{
 _customerComm=new SendingSMS();
}
 _customerComm.Send(message);
}else{
 if(_customerComm == null)
 {
  _customerComm=new SendingEmail();
 }
 _customerComm.Send(message);
}

那我們再來說說DI,DI主要幫助我們將實現(xiàn)注入到抽象的類(ICustomerCommunication接口)中.DI的主要減少類之間的耦合,并且將抽象和具體實現(xiàn)的綁定移除依賴類.

構(gòu)造函數(shù)注入

通過構(gòu)造函數(shù)注入我們將實現(xiàn)類的對象傳遞給依賴類的構(gòu)造函數(shù),并將其分配給這個接口.

?
1
2
3
4
5
6
7
8
9
10
public class Ordering
{
 ICustomerCommunication _customerComm=null;
 public Ordering(ICustomerCommunication customerComm){
  _customerComm=customerComm;
 }
 public void Order(string message){
  _customerComm.Send(message);
 }
}

在上面的代碼中,構(gòu)造函數(shù)將采用實現(xiàn)類對象綁定到接口中.如果我們將SendingSMS的實現(xiàn)傳遞給這個類,我們要做的就是聲明一個SendingSMS類的實例,然后將其傳遞給Ordering的構(gòu)造函數(shù),如下所示:

方法注入

通過使用構(gòu)造函數(shù)注入,我們將不得不在Ordering類的生存期內(nèi)使用實現(xiàn)類的實例SendingSMS或SendingEmail類.現(xiàn)在如果要在每次調(diào)用該方法時傳遞實現(xiàn)類的實例,則必須使用方法注入.

?
1
2
3
4
5
6
7
public class Ordering
{
 public void Order(ICustomerCommunication customerComm,string message){
  _customerComm=customerComm;
  _customerComm.Send(message);
 }
}

調(diào)用方式如下所示

?
1
2
3
SendingSMS sendingSMS=new SendingSMS();
Ordering ordering=new Ordering(sendingSMS);
ordering.Order(sendingSMS,"msg");

屬性注入

通過如上描述我們知道了構(gòu)造函數(shù)注入方法在整個生命周期中使用依賴類,而方法注入是將我們的注入直接去限于該方法中,然后我們再去了解一下屬性注入

?
1
2
3
4
5
6
7
public class Ordering
{
 public ICustomerCommunication customerComm {get;set;}
 public void Order(string message){
  _customerComm.Send(message);
 }
}

調(diào)用方式如下所示

?
1
2
3
4
SendingSMS sendingSMS=new SendingSMS();
Ordering ordering=new Ordering(sendingSMS);
ordering.customerComm=sendingSMS;
ordering.Order("msg");

其實構(gòu)造函數(shù)注入是實現(xiàn)DI最常用的方法.如果需要在每個方法調(diào)用上傳遞不同的依賴關(guān)系,則可以使用方法注入屬性注入的使用還是比較少的.

Reference

https://zh.wikipedia.org/wiki/控制反轉(zhuǎn)

https://zh.wikipedia.org/zh-hans/依賴反轉(zhuǎn)原則

到此這篇關(guān)于.NET IoC模式依賴反轉(zhuǎn)(DIP)、控制反轉(zhuǎn)(Ioc)、依賴注入(DI)的文章就介紹到這了,更多相關(guān).NET IoC模式依賴反轉(zhuǎn)、控制反轉(zhuǎn)、依賴注入內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/yyfh/p/12874075.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 九九福利| av在线干| 亚洲精品日韩综合观看成人91 | 日本高清无卡码一区二区久久 | 黄色三级网站 | h视频在线免费观看 | 亚洲视频在线视频 | 黄色片子免费观看 | 中文字幕在线精品 | 欧美一级欧美三级在线观看 | 久久久夜夜夜 | 欧美一区二区三区在线观看视频 | 午夜视频 | 成人av在线网 | 超级碰在线 | 亚洲国产精品一区二区久久,亚洲午夜 | 日韩综合视频在线观看 | 久日av| 国产成人精品久久二区二区91 | 欧美日韩1区 | 久久久久久久国产视频 | 99精品欧美一区二区三区 | 欧美黄色免费网址 | 七七婷婷婷婷精品国产 | 亚洲国产精品久久久 | 午夜精品久久久久久久久 | 国产综合亚洲精品一区二 | 中文字幕www.| 俺去俺来也www色官网cms | 激情网五月天 | 一级毛片免费完整视频 | 亚洲午夜免费 | 99这里只有精品 | 成人av免费看 | 日韩有码在线播放 | 日韩欧美一区二区三 | 国产免费一级特黄录像 | 亚洲欧美激情在线 | 国产一区二区三区四 | 午夜精品久久久久 | 午夜精品久久久久久久99黑人 |