[不一樣的依賴注入]容器與服務周期的結合

微信公眾號:趣編程ACE
關注可了解更多的.Net日常開發技巧,如需源碼請后臺留言 源碼;
如果覺得本公眾號對您有幫助,歡迎關注

前文回顧

[不一樣的依賴注入]通過遞歸實現容器里依賴注入

不一樣的依賴注入 創建周期的加入

首先創建一個依賴提供類,其中這個類里面包含需要創建的實例(服務)類型以及這個服務的生命周期:

1public?class?Dependency2{3????//?構造函數賦值,提供服務類型以及生命周期4????public?Dependency(Type?type,SelfLifeTime?selfLifeTime)5????{6????????Type?=?type;7????????LifeTime?=?selfLifeTime;8????}9
10????public?Type?Type?{?get;?set;?}
11????public?SelfLifeTime?LifeTime?{?get;?set;?}?//?SelfLifeTime??是一個枚舉類型,包含單例和瞬時
12????public?object?Implementation?{?get;?set;?}?//?服務具體實現類
13????public?bool?Implemented?{?get;?set;?}??//?判斷是否被實現
14
15????//?添加實現類
16????public?void?AddImplementation(object?i)
17????{
18????????this.Implementation?=?i;
19????????this.Implemented?=?true;
20????}
21}
1//?生命周期枚舉
2public?enum?SelfLifeTime
3{
4????Singleton=0,?//?單例
5????Transient=1??//?瞬態
6}

容器改造

1public?class?Container2{3????List<Type>?_lists;4????List<Dependency>?dependencies;??//?Dependency的容器集合5????public?Container()6????{7????????_lists?=?new?List<Type>();8????????dependencies?=?new?List<Dependency>();??//?初始化?防止空引用9????}
10
11????//?添加單例?
12????public?void?AddSingleton<T>()
13????{
14????????dependencies.Add(new?Dependency(typeof(T),SelfLifeTime.Singleton));
15????}
16
17????//?添加瞬態
18????public?void?AddTransient<T>()
19????{
20????????dependencies.Add(new?Dependency(typeof(T),?SelfLifeTime.Transient));
21????}
22
23????public?void?Add<T>()
24????{
25????????_lists.Add(typeof(T));
26????}
27
28????public?void?Add(Type?type)
29????{
30????????_lists.Add(type);
31????}
32
33????public?Type?GetDenpendencyType(Type?type)
34????{
35????????return?_lists.FirstOrDefault(x=>x.Name?==?type.Name);
36????}
37
38????//?得到容器中指定類型
39????public?Dependency?GetDependencyLifeTimeType(Type?type)
40????{
41????????return?dependencies.FirstOrDefault(x=>x.Type.Name?==?type.Name);
42????}
43}

創建容器,生成服務,驗證周期

1var?container?=?new?Container();?//?創建容器2container.AddTransient<Test>();??//?將Test?創建為瞬態3container.AddTransient<Test2>();?//?將Test2?創建為瞬態4container.AddTransient<Test3>();?//?將Test3?創建為瞬態56var?service?=?new?ContainerService(container);7var?test?=?service.GenerateServiceFixed<Test>();?//?創建Test?實例服務8var?test3?=?service.GenerateServiceFixed<Test3>();?//創建?Test3?實例服務9var?test4?=?service.GenerateServiceFixed<Test3>();?//?創建?Test3?實例服務
10test.PrintTest1();
11test3.PrintTest3();
12test4.PrintTest3();

具體實現效果參見視頻講解~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287086.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287086.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(11)python里面while到底有多少知識點

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

【經典回放】多種語言系列數據結構算法:二叉樹(JavaScript版)

1 二叉樹類的設計以及二叉樹遍歷 要完成二叉樹的類設計&#xff0c;最好把鏈表下的Node.js復制過來&#xff0c;相比鏈表的結點&#xff0c;二叉樹僅僅是多了一個結點指針而已。略加修改后&#xff0c;就是&#xff1a; function TNODE(DATA) { this.DataDATA; this.lChildnu…

Fiddler之解決https鏈接返回數據顯示亂碼問題

1 、問題 我網頁訪問淘寶&#xff0c;然后F12查看關鍵鏈接&#xff0c;返回的數據里面有json各式的數據&#xff0c;然后我通過關鍵字在Fiddler里面找到鏈接&#xff0c;然后查看返回的內容是亂碼。 2 、解決辦法 然后這樣設置&#xff0c;再去查看SyntaxView或者Raw都可以看到…

android上傳圖片被旋轉,input上傳照片旋轉解決辦法

需求很簡單&#xff1a;h5拍照上傳照片&#xff0c;然后顯示出來問題在&#xff1a;上傳之后的圖片在PC&#xff0c;IOS端均能正常顯示&#xff0c;Android端顯示的則是被旋轉90度的。直接上代碼下面這個方法傳入file對象&#xff0c;然后會去除掉照片中的exIf信息&#xff0c;…

(12)python 的列表我從沒想過會那么好用

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

如何優雅的跨 Namespace 同步 Secret 和 ConfigMap?

Secret 和 ConfigMap 資源對象是命名空間級別的。它們只能被同一命名空間中的 Pod 引用。所以有時候不得不手動為每個命名空間創建它們。但有很多場景&#xff0c;我們想讓它們是全局的&#xff0c;至少可以是跨命名空間共享的 Secret 和 ConfigMap&#xff0c;例如這些場景&am…

定量遙感:計算地方時和太陽高度角(C++代碼)

在定量遙感中,通常需要計算地方時和太陽高度角,本文采用C++語言實現。 #include <cmath> #include <iostream> #include <fstream> using namespace std; void main() {int JD,NF,Y,R,s[5],F[5];float JF,WD;float N0;ifstream data1("d:\\result\\da…

html5 語義化標簽

html5 語義化標簽 在HTML 5出來之前&#xff0c;我們用div來表示頁面章節&#xff0c;但是這些div都沒有實際意義。&#xff08;即使我們用css樣式的id和class形容這塊內容的意義&#xff09;。這些標簽只是我們提供給瀏覽器的指令&#xff0c;只是定義一個網頁的某些部分。但…

Android之實現首尾帶圓角的多顏色水平條

1 效果圖 3 代碼實現 這里我們采用PercentRelativeLayout布局,首尾我們用半圓shape實現,代碼如下 color.xml <color name="progress_first">#1ebBd5</color><color name="progress_second">#f36f53</color><color name=&…

setAutoCommit(false)導致讀不到數據

如果把Connection的AutoCommit設為False,兩次executeQuery之間&#xff0c;通過其它途徑&#xff08;我通過Navicat&#xff09;修改了status值為1&#xff0c;第二次executeQuery依然把那條數據讀出來了&#xff0c;也就是說&#xff0c;我在Navicat中的操作就像沒有發生一樣&…

log4j簡介及應用

一、介紹 Log4j是Apache的一個開放源代碼項目&#xff0c;通過使用Log4j&#xff0c;我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務 器、NT的事件記錄器、UNIX Syslog守護進程等&#xff1b;我們也可以控制每一條日志的輸出格式&#xff1b;通過…

(9)有一些人在學習編程的時候總以為代碼是死板的

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

GPS實驗一:GPS手持機的使用

一、實習目的 了解GPS手持機的使用 二、實習內容 了解GPS手持機的功能和相關操作 三、實習地點 選擇視野開闊的場所,方便接受衛星信號。 四、實習工具 GPS接收機是一款手持型的個人導航設備,它可以利用GPS衛星星座計算出當前的位置。其主要圖標有:OUT/IN(放大/縮小)、N…

.NET性能優化-推薦使用Collections.Pooled

簡介性能優化就是如何在保證處理相同數量的請求情況下占用更少的資源&#xff0c;而這個資源一般就是CPU或者內存&#xff0c;當然還有操作系統IO句柄、網絡流量、磁盤占用等等。但是絕大多數時候&#xff0c;我們就是在降低CPU和內存的占用率。之前分享的內容都有一些局限性&a…

Android之PC瀏覽器上傳表單格式大文件到手機客戶端read函數阻塞問題

1 、問題 PC瀏覽器上傳表單格式大文件到手機服務器端,然后read文件真實數據時候出現阻塞。 比如 User-Agent: PostmanRuntime/7.26.1Accept: */*Cache-Control: no-cachePostman-Token: c7e5e240-4398-4ac6-ba7f-98e99b5b4a01Host: 10.15.42.180:9999Accept-Encoding: gzip,…

避免活躍性危險(第十章)

2019獨角獸企業重金招聘Python工程師標準>>> 避免活躍性危險 在安全性與活躍性之間通常存在著某種制衡&#xff0c;我們使用加鎖機制來確保線程安全&#xff0c;但如果過度地使用加鎖&#xff0c;則可能導致“鎖順序死鎖”。同樣&#xff0c;我們使用線程池和信號量…

[poj2446]Chessboard

Description 給定一個mn的棋盤&#xff0c;上面有k個洞&#xff0c;求是否能在不重復覆蓋且不覆蓋到洞的情況下&#xff0c;用21的卡片完全覆蓋棋盤。 Input 第一行有三個整數n,m,k(0<m,n<32, 0<k<mn)&#xff0c;m表示行數&#xff0c;n表示列數。 接下來k行&…

Ubuntu下編譯內核

一、下載源代碼和編譯軟件的準備 下載內核源代碼&#xff1a;http://www.kernel.org/ 注意&#xff0c;點擊2.6.25內核的F版&#xff0c;即完整版。 如果你懶得去網站點聯接&#xff0c;運行下列命令&#xff1a; 代碼:$cd ~$ wget http://www.kernel.org/pub/linux/kernel/v2.…

(10)C#偷懶的開始永無止境的循環?

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

活照片 android,活照片app安卓

活照片app是當前國內一款最新的圖片處理應用軟件&#xff0c;能幫助大家快速進行最新的手機拍照、處理功能&#xff0c;當前活照片app已經推出了安卓、蘋果版本&#xff0c;可以幫助大家一鍵修圖&#xff0c;將你的圖片變得更加有趣。活照片app功能&#xff1a;它可以讓你的照片…