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

微信公众号:趣编程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.mzph.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;它可以让你的照片…