日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

.net程序開發(fā)IOC控制反轉(zhuǎn)和DI依賴注入詳解

瀏覽:264日期:2022-06-09 10:17:57
目錄
  • IOC控制反轉(zhuǎn)
  • DI依賴注入
  • 服務(wù)生命周期
  • 其它

IOC控制反轉(zhuǎn)

大部分應(yīng)用程序都是這樣編寫的:編譯時(shí)依賴關(guān)系順著運(yùn)行時(shí)執(zhí)行的方向流動(dòng),從而生成一個(gè)直接依賴項(xiàng)關(guān)系圖。 也就是說,如果類 A 調(diào)用類 B 的方法,類 B 調(diào)用 C 類的方法,則在編譯時(shí),類 A 將取決于類 B,而 B 類又取決于類 C

應(yīng)用程序中的依賴關(guān)系方向應(yīng)該是抽象的方向,而不是實(shí)現(xiàn)詳細(xì)信息的方向。而這就是控制反轉(zhuǎn)的思想。

應(yīng)用依賴關(guān)系反轉(zhuǎn)原則后,A 可以調(diào)用 B 實(shí)現(xiàn)的抽象上的方法,讓 A 可以在運(yùn)行時(shí)調(diào)用 B,而 B 又在編譯時(shí)依賴于 A 控制的接口(因此,典型的編譯時(shí)依賴項(xiàng)發(fā)生反轉(zhuǎn))。 運(yùn)行時(shí),程序執(zhí)行的流程保持不變,但接口引入意味著可以輕松插入這些接口的不同實(shí)現(xiàn)。

上下不同的實(shí)現(xiàn)方式在于之前的依賴關(guān)系是A->B->C,控制反轉(zhuǎn)后A->B接口->C接口,然后具體的B,C實(shí)現(xiàn)又是B->B接口 的反轉(zhuǎn)依賴。這樣的好處就是A只依賴B接口而不是依賴實(shí)現(xiàn),具體我們要實(shí)現(xiàn)什么只需要按照業(yè)務(wù)需求進(jìn)行編寫,并且可以隨時(shí)替換實(shí)現(xiàn)而不會影響A的實(shí)現(xiàn),這種思想就是控制反轉(zhuǎn)。

如下是順序依賴:

public class A{    //依賴具體類    public B b;    public C c;    public A(B _b, C _c) {b = _b;c = _c;    }    public void Listen()    {b.SayHi();c.SayBye();    }}public class B{    public void SayHi()    {Console.WriteLine("hi...");    }}public class C{    public void SayBye()    {Console.WriteLine("bye...");    }}

如下是控制反轉(zhuǎn):

public class A{    //依賴接口    public IB b;    public IC c;    public A(IB _b, IC _c)    {b = _b;c = _c;    }    public void Listen()    {b.SayHi();c.SayBye();    }}public interface IB{    public void SayHi();}public interface IC{    public void SayBye();}

DI依賴注入

.NET 支持依賴關(guān)系注入 (DI) 軟件設(shè)計(jì)模式,這是一種在類及其依賴項(xiàng)之間實(shí)現(xiàn)控制反轉(zhuǎn) (IoC) 的技術(shù)。
我們首先用代碼來看什么是DI,在.net提供的擴(kuò)展包Microsoft.Extensions.DependencyInjection中來完成DI,nuget安裝。

然后我們實(shí)現(xiàn)接口B和接口C,實(shí)現(xiàn)我們可以說英語,也可以說漢語,我們在SayHi和SayBye中輸出漢語。

public class B : IB{    public void SayHi()    {Console.WriteLine("你好...");    }}public class C : IC{    public void SayBye()    {Console.WriteLine("再見...");    }}

然后在服務(wù)容器中注冊依賴關(guān)系。 .NET 提供了一個(gè)內(nèi)置的服務(wù)容器 IServiceProvider。 服務(wù)通常在應(yīng)用啟動(dòng)時(shí)注冊,并追加到 IServiceCollection。 添加所有服務(wù)后,可以使用 BuildServiceProvider 創(chuàng)建服務(wù)容器,然后在容器中直接“要”對象而不用去管它如何實(shí)例化,并且DI具備傳染性,假如B引用了D接口ID,那么我們注冊B并在獲取B實(shí)例時(shí),引用的D接口也會被實(shí)例化。

    //IServiceCollection 服務(wù)    IServiceCollection services = new ServiceCollection();    //服務(wù)注冊    services.AddTransient<A>();    services.AddTransient<IB, B>();    services.AddTransient<IC, C>();    //創(chuàng)建服務(wù)容器    var serviceProvider = services.BuildServiceProvider();    //獲取服務(wù)    var a = serviceProvider.GetRequiredService<A>();    //使用    a.Listen();    Console.ReadKey();

這就是通過DI依賴注入的方式來實(shí)現(xiàn)IOC的思想,或許你會好奇為什么我們不直接實(shí)例化A,然后在構(gòu)造方法里面?zhèn)鬟M(jìn)去就行了,也就不依賴DI實(shí)現(xiàn)了。但是程序結(jié)構(gòu)更復(fù)雜些呢,比如上面提到的B又有D,D又有F呢,這樣在構(gòu)造的時(shí)候不是一直要new很多對象,而且同一個(gè)接口的不同實(shí)現(xiàn)還要去找實(shí)例化處的代碼進(jìn)行修改。例如SayHI我想說英文呢?那么我們就可以實(shí)現(xiàn)一個(gè)BB,然后在服務(wù)注冊的地方注冊BB就可以了。

public class BB : IB{    public void SayHi()    {Console.WriteLine("hello...");    }}

替換注冊BB services.AddTransient<IB, BB>(),而不用去改任何邏輯。

服務(wù)生命周期

在注冊服務(wù)的時(shí)候我使用的AddTransient方法,表示注冊的服務(wù)是瞬態(tài)的,也就是每次請求都是重新創(chuàng)建實(shí)例。同時(shí)還提供其它注冊服務(wù)的方法。

服務(wù)有三種聲明周期:

瞬態(tài)

作用域

單例

  • 瞬態(tài)

服務(wù)是每次從服務(wù)容器進(jìn)行請求時(shí)創(chuàng)建的。 這種生存期適合輕量級、 無狀態(tài)的服務(wù)。 用 AddTransient 注冊服務(wù)。在處理請求的應(yīng)用中,在請求結(jié)束時(shí)會釋放暫時(shí)服務(wù)。

  • 作用域

指定了作用域的生存期指明了每個(gè)客戶端請求(連接)創(chuàng)建一次服務(wù)。 向 AddScoped 注冊范圍內(nèi)服務(wù)。在處理請求的應(yīng)用中,在請求結(jié)束時(shí)會釋放有作用域的服務(wù)。

想asp.net 在處理一個(gè)請求的時(shí)候是一個(gè)作用域,同樣我們自己也可以定義作用域。使用serviceProvider.CreateScope()創(chuàng)建作用域,在作用域釋放后對象將被釋放。

我們使用AddScoped添加對象,然后在作用域中取兩個(gè)A對象進(jìn)行比較,可以看到是True

如果我們用AddTransient注冊A,即使在作用域內(nèi)兩個(gè)對象比較也是不一樣的,結(jié)果為False

  • 單例

單例大家應(yīng)該好理解,就是設(shè)計(jì)模式中的單例,使用AddSingleton 注冊,在首次請求它們時(shí)進(jìn)行創(chuàng)建;或者在向容器直接提供實(shí)現(xiàn)實(shí)例時(shí)由開發(fā)人員進(jìn)行創(chuàng)建。 很少用到此方法,因?yàn)榭赡苁蔷€程不安全的,如果服務(wù)中有狀態(tài)。

其它

在Microsoft.Extensions.DependencyInjection中只能用構(gòu)造函數(shù)注入,其它框架還提供屬性注入,比如autofac。至于原因不得而知,當(dāng)然也看個(gè)人喜好。查了些資料說是構(gòu)造函數(shù)注入更科學(xué),在對象創(chuàng)建的瞬間對象的構(gòu)造方法將服務(wù)實(shí)例化,避免邏輯問題。

以上就是.net程序開發(fā)IOC控制反轉(zhuǎn)和DI依賴注入詳解的詳細(xì)內(nèi)容,更多關(guān)于.net 控制反轉(zhuǎn)依賴注入的資料請關(guān)注其它相關(guān)文章!

標(biāo)簽: ASP.NET
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品a级片| 国产亚洲欧美日韩在线观看一区二区| 国产激情综合| 国产精品日韩精品中文字幕| 欧美日韩精品一区二区三区视频 | 亚洲高清不卡| 欧美日韩精品一本二本三本| 在线日韩欧美| 不卡在线一区| 日韩专区欧美专区| 日韩欧美精品一区二区综合视频| 视频一区二区三区入口| 亚洲性色av| 日韩激情综合| 欧美国产日本| 日韩精品不卡一区二区| 蜜桃传媒麻豆第一区在线观看| 精品一二三区| 玖玖精品视频| 欧美中文一区二区| 国产精品美女久久久| 亚洲免费影院| 91嫩草精品| 久久精品xxxxx| 日韩不卡一区| 欧美特黄一区| 欧美精品三级在线| 日韩深夜视频| 老色鬼久久亚洲一区二区| 国产日韩1区| se01亚洲视频 | 国产精品视频首页| 日韩啪啪电影网| 国产一级久久| 欧美色综合网| 午夜精品成人av| 另类av一区二区| 国产精品18| 欧美日韩亚洲在线观看| 日韩av午夜在线观看| 国产一区二区三区四区五区 | 午夜日韩影院| 日韩精品电影| 日韩久久99| 久久久男人天堂| 亚洲三级视频| 色在线中文字幕| 亚洲欧美日韩国产一区| 国产精品巨作av| 欧美1级日本1级| 欧美日韩亚洲国产精品| 久久久国产亚洲精品| 91欧美精品| 亚洲精品一区二区妖精| 国产欧美91| 美腿丝袜亚洲一区| 欧美日韩国产传媒| 99riav1国产精品视频| 欧美va天堂| 日韩在线不卡| 97精品在线| 99久久www免费| 久久亚洲一区| 国产精品视频一区二区三区综合 | 午夜日韩在线| 国产精久久久| 亚洲一区二区av| 日韩深夜视频| 国产日韩一区二区三免费高清| 激情六月综合| 欧美a一区二区| 亚洲婷婷丁香| 激情综合在线| 国产一区2区在线观看| 综合激情一区| 免费av一区二区三区四区| 另类欧美日韩国产在线| 日本不卡高清| 国产视频久久| 一本大道色婷婷在线| 国产精品任我爽爆在线播放 | 国产在线观看www| 日本少妇一区二区| 爽爽淫人综合网网站| 精品久久国产一区| 日韩精品欧美成人高清一区二区| 免费精品国产的网站免费观看| 麻豆中文一区二区| 日韩和欧美一区二区三区| 欧美一级专区| 蜜桃国内精品久久久久软件9| 成人在线视频免费| 欧美aa在线视频| 国产视频网站一区二区三区| 蜜桃久久精品一区二区| 国产免费成人| 免费人成黄页网站在线一区二区| 精品在线播放| 久久永久免费| 久久要要av| 精品免费视频| 老司机精品视频网| 国产日韩一区二区三免费高清 | 日韩激情精品| 成人久久一区| 成年男女免费视频网站不卡| 国产精品tv| 国产探花一区| 欧美亚洲tv| 欧美日韩一区二区高清| 亚洲精品日本| 一区二区三区国产盗摄| 在线日韩电影| 亚洲国产不卡| 9国产精品视频| 免费中文字幕日韩欧美| 国产美女精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 中文久久精品| 视频一区国产视频| 一区二区三区午夜视频| 五月国产精品| 久久国产免费看| 麻豆视频一区| 高清一区二区三区| 国产 日韩 欧美一区| 久久久久国产| 国产精品av久久久久久麻豆网| 欧美成人午夜| 午夜在线视频一区二区区别| 蜜桃视频一区二区三区在线观看| 三级欧美在线一区| 日本va欧美va欧美va精品| 欧美极品一区二区三区| 国产成人在线中文字幕| 99精品视频精品精品视频| 伊人久久大香线蕉av超碰演员| 中文在线不卡| 青草综合视频| 成人免费一区| 国产二区精品| 日韩高清中文字幕一区| 日韩精品91亚洲二区在线观看| 日韩欧美美女在线观看| 国产一区日韩一区| 国产精品日本一区二区三区在线| 麻豆视频一区| 国产亚洲在线| 日本午夜免费一区二区| 色网在线免费观看| 一区二区亚洲视频| 99视频精品全国免费| 美女视频黄久久| 日韩亚洲精品在线观看| 另类综合日韩欧美亚洲| 国产日韩欧美一区二区三区在线观看 | 久久视频国产| 99国产精品视频免费观看一公开| 天堂va在线高清一区| 麻豆国产欧美日韩综合精品二区| 亚洲黄色免费av| 黄色成人在线网址| 日本午夜精品久久久久| 91视频一区| 丝袜亚洲另类欧美| 久久不见久久见中文字幕免费| 亚洲天堂av影院| 每日更新成人在线视频| 国产精品一区二区美女视频免费看 | 欧美 日韩 国产一区二区在线视频 | 亚洲二区免费| 日韩欧美中文字幕一区二区三区| 久久永久免费| 久久精品播放| 亚洲一本视频| 久久国产精品美女| 91精品国产经典在线观看| 免费观看在线色综合| 亚洲欧美高清| 亚洲91视频| 午夜欧美精品久久久久久久| 久久国产直播| 啪啪国产精品| 少妇高潮一区二区三区99| 亚洲综合另类| 国产中文字幕一区二区三区| 在线亚洲国产精品网站| 国产极品一区| 国产农村妇女精品一二区| 久久xxx视频| 亚洲综合不卡| 欧美极品一区二区三区| 性欧美精品高清| 岛国av在线网站| 一区二区国产精品| 午夜久久中文| 国产精品密蕾丝视频下载| 国产婷婷精品| av日韩中文| 国产精品亚洲片在线播放|