微信公眾號:趣編程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();
具體實現效果參見視頻講解~