大数跨境
0
0

[不一样的依赖注入]容器与服务周期的结合

[不一样的依赖注入]容器与服务周期的结合 元讯趣编程
2022-05-25
1
导读:[不一样的依赖注入]容器与服务周期的结合


微信公众号:趣编程ACE
关注可了解更多的.Net日常开发技巧,如需源码请后台留言 源码;
如果觉得本公众号对您有帮助,欢迎关注

前文回顾

[不一样的依赖注入]通过递归实现容器里依赖注入

不一样的依赖注入 创建周期的加入

首先创建一个依赖提供类,其中这个类里面包含需要创建的实例(服务)类型以及这个服务的生命周期:

 1public class Dependency
2{
3    // 构造函数赋值,提供服务类型以及生命周期
4    public Dependency(Type type,SelfLifeTime selfLifeTime)
5    
{
6        Type = type;
7        LifeTime = selfLifeTime;
8    }
9
10    public Type Type { getset; }
11    public SelfLifeTime LifeTime { getset; } // SelfLifeTime  是一个枚举类型,包含单例和瞬时
12    public object Implementation { getset; } // 服务具体实现类
13    public bool Implemented { getset; }  // 判断是否被实现
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 Container
2{
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 创建为瞬态
5
6var 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();

具体实现效果参见视频讲解~



【声明】内容源于网络
0
0
元讯趣编程
学习编程从入门到精通
内容 51
粉丝 0
元讯趣编程 学习编程从入门到精通
总阅读108
粉丝0
内容51