150行代码打造.net core生产力工具,你值得拥有

原文:150行代码打造.net core生产力工具,你值得拥有

你是否在初学 .net core时,被依赖注入所折磨?

你是否在开发过程中,为了注入依赖而不停的在Startup中增加注入代码,而感到麻烦?

你是否考虑过或寻找过能轻松实现自动注入的组件?

如果有,那请欢迎继续往下看。

或许你是被我这标题给吸引过来的,请不要怀疑自己的眼睛,如果你真的遇到过以上的问题,那我相信我的分享能帮助到你。

再次声明,我不是标题党。

闲话少说,此组件已经在我们公司内部使用半年有余,虽然代码不多,但也确确实实为公司同事解决些许麻烦事。为了响应公司开源的号召,所以决定将此组件开源。

在没有此工具之前,相信大多数使用core的程序员都是使用如下方式注入依赖的:

services.AddTransient<IStudentRepository, StudentRepository>();
services.AddTransient<IGroupRepository, GroupRepository>();
services.AddTransient<ISchoolRepository, SchoolRepository>();
.....
.....
.....
.....
此处省略若干行

但在项目的开发过程中,需要依赖注入的类存在频繁变动的情况,而时常会出现写了实体以及对应的接口后,而忘记添加注入代码情况。此情况不但增加了开发人员的重复而无意义的工作量,也可能会导致出现一些无谓的bug。

从上面的代码中我们可以发现,每一行的代码都非常相似,都是把一个接口和实现类注入到系统中,并设置生命周期为Transient,关于依赖注入相关的知识如果有不了解的,可以参考博客园中其他大神的讲解,这不是我这篇文章的重点。

那既然代码非常相似,那么我们就应该可以想办法封装一下,让代码去实现自动注入,至此,AutoDI组件应运而生。

使用AutoDI组件的方法如下:

首先,定义一个接口,示例如下:

    public interface IStudentServices : IScopedAutoDIable
    {
        int GetId();
    }

其次,定义接口的实现类:

    public class StudentServices : IStudentServices
    {
        public int GetId()
        {
            return 1;
        }
    }

细心的朋友应该已经发现了,我上面代码的IStudentServices接口继承了IScopedAutoDIable,从字面意思应该就能看出这个接口是做什么。

注:接口和实现类的命名规则需要满足接口为Ixxx,类名为xxx的格式。

什么?看不懂英文?那好吧,我解释下吧,使用了AutoDI的项目在启动的时候,或自动搜索程序集中继承了IScopedAutoDIable的接口或类,找到后,会调用TryAddScoped方法将接口或类注入到系统中。同理,如果想将注入的生命周期改为瞬时的或者单例的,那只需要分别继承ITransientAutoDIable和ISingletonAutoDIable类即可。

最后,也是最重要的一步,在Startup类ConfigureServices方法中,写入如下代码:

services.AutoDI();

以上代码将会遍历程序所引用的所有程序集中继承了IAutoDIable接口的接口或类,然后实现自动注入。

当然了,有比较较真的或对代码有洁癖的人,可能会说,我不想遍历所有的程序集,这样会影响程序的启动速度。那咱也是有办法满足的,你只需在调用AutoDI接口时,将需要遍历的程序集指定即可。示例代码如下:

 services.AutoDI(typeof(IAutoDIEntity).Assembly);

上述的代码中,程序将在IAutoDIEntity接口所在的类库中遍历继承了IAutoDIable接口的接口或类。这里写的IAutoDIEntity只是辅助获取程序集的接口,并无实际意义,你也可以换成你想遍历的程序集的任意的类或者接口。

到这里,或许还是会有人说,这还不能满足我的要求,我的接口和类已经继承了IXXXX接口了,我不想继承你定义的IAutoDIable这几个相关的接口,我想继承我自定义的接口。我只能说。。。。

可以,你想干嘛都可以。

如下所示:

services.AutoDI<IXXXX>();

到这里,此组件的使用方式已经描述完毕,有不清楚的小伙伴可以想办法与我联系。具体怎么联系,随你。反正我也不会搭理你们的。O(∩_∩)O哈哈~

不过,如果你在github上给我点了star的话,我或许可以考虑翻下你的牌子。

最后留下源码git地址:

https://github.com/billsking/WeShare.AutoDI

nuget请搜索:WeShare.AutoDI



再最后,发个武汉 .net 召集令

目前各地.net俱乐部活动做了一期又一期,我们大武汉竟然一场活动都没做过,笔者非常着急,非常想为社区贡献一份力量,所以想筹备2020年武汉.net俱乐部活动,目前已经准备了一些分享资料,预计2020年3月或者4月举办第一期线下活动。如果您有场地支持,有好的经验分享或者一些好的想法,请一定要留言告诉我,期待我们武汉的第一次活动能顺利举行。

点击链接加入群聊【武汉.Net微软技术俱乐部】:https://jq.qq.com/?_wv=1027&k=5YbyGhL

原文地址:https://www.cnblogs.com/lonelyxmas/p/12239110.html

时间: 2024-10-31 19:01:15

150行代码打造.net core生产力工具,你值得拥有的相关文章

200行代码打造超越一线互联网公司的换肤架构

本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: 网易云QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没? 心理分析:没有接触过换肤技术 第一次听到该名词肯定会很茫然.面试官考的是对资源加载,监听布局,有没有了解.本文从换肤实战一对一讲解.告诉你如何做以及实现.文章末尾带换肤项目源码 求职者: 从监听布局开始到 换肤原理,详细给面试官讲解换肤的原理 接下来我们一起分享这篇干货. Android的主题换肤 ,可插件化提供皮肤包,无需Activity的重

酷毙了!python用37行代码打造属于自己的音乐播放器,附源码

想不想手动打造一款专属于你的播放器,同时练练Python编程? 如果想,那就立即行动吧! 所需库pygametkintermutagen 至于它们的使用,可以浏览一下文档,如果你想做更功能强大的播放器,那必须好好看看哦! 设计思路作为版本0,我们并不想做太复杂的项目.只需实现以下几个功能: 将某个目录下的mp3文件名在listbox中显示 显示当前播放的歌曲名 播放上一首歌曲 播放下一首歌曲 停止播放 获取目录下的mp3文件直接上代码! def directorychooser():direct

100行代码打造属于自己的代理ip池

经常使用爬虫的朋友对代理ip应该比较熟悉,代理ip就是可以模拟一个ip地址去访问某个网站.我们有时候需要爬取某个网站的大量信息时,可能由于我们爬的次数太多导致我们的ip被对方的服务器暂时屏蔽(也就是所谓的防爬虫防洪水的一种措施),这个时候就需要我们的代理ip出场了 思路分析(写爬虫前大家都必须要分析一下) https://www.xicidaili.com/ 上图就是我们的西刺代理网站,今天我们就是来拿它的数据,老司机一看这个界面就会自动右击鼠标->查看源代码, 我们会发现数据都在<tr>

150+行Python代码实现带界面的数独游戏

150行代码实现图形化数独游戏 Github地址,欢迎各位大佬们fork.star啥的,感谢: 今天闲着没事干,以前做过html+js版的数独,这次做个python版本的,界面由pygame完成,数独生成由递归算法实现,由shuffle保证每次游戏都是不一样的情况,have fun: 功能列表: 图形化的数独游戏: python实现,依赖pygame库: 随机生成游戏,每次运行都不一样: 数字填入后的正确性判断以及颜色提示: 显示剩余需填入的空格,已经操作的次数: 难度可选,通过修改需要填入的空

150+行Python代码实现带界面的数独游戏!益智烧脑了解一下!

150行代码实现图形化数独游戏 Github地址 ,欢迎各位大佬们fork.star啥的,感谢: 今天闲着没事干,以前做过html+js版的数独,这次做个python版本的,界面由pygame完成,数独生成由递归算法实现,由shuffle保证每次游戏都是不一样的情况,have fun: 功能列表: 图形化的数独游戏: python实现,依赖pygame库: 随机生成游戏,每次运行都不一样: 数字填入后的正确性判断以及颜色提示: 显示剩余需填入的空格,已经操作的次数: 难度可选,通过修改需要填入的

150行JavaScript代码实现增强现实

增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像.视频.3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术1990年提出.随着随身电子产品CPU运算能力的提升,预期增强现实的用途将会越来越广. 本文介绍使用JavaScript开源框架AR.js实现的增强现实的Hello World例子. 先看效果: 首先在手机浏览器里打开我部署在github page上的这个demo应用: https://i04

通过 Mesos、Docker 和 Go,使用 300 行代码创建一个分布式系统

[摘要]虽然 Docker 和 Mesos 已成为不折不扣的 Buzzwords ,但是对于大部分人来说它们仍然是陌生的,下面我们就一起领略 Mesos .Docker 和 Go 配合带来的强大破坏力,如何通过 300 行代码打造一个比特币开采系统. 时下,对于大部分 IT 玩家来说, Docker 和 Mesos 都是熟悉和陌生的:熟悉在于这两个词无疑已成为大家讨论的焦点,而陌生在于这两个技术并未在生产环境得到广泛使用,因此很多人仍然不知道它们究竟有什么优势,或者能干什么.近日, John W

jquery轮播图详解,40行代码即可简单解决。

我在两个月以前没有接触过html,css,jquery,javascript.今天我却在这里分享一篇技术贴,可能在技术大牛面前我的文章漏洞百出,也请斧正. 可以看出来,无论是div+css布局还是jquery其实真的很简单,只要不停的练习就会有很大进步.每天150行代码,会帮助我们走的更远.对于编程对于脚本语言,我们这样的学生娃没有和比人一样初中,高中就开始研究,要想走在时代的前沿需要怎样的努力和毅力,是我们一类人需要思考的方向. 下面解释下焦点图,焦点图使用范围非常广,banner和anima

打造程序员的高效生产力工具-mac篇

打造程序员的高效生产力工具-mac篇 1   概述 古语有云:“工欲善其事,必先利其器” [1] ,作为一个程序员,他最重要的生产资源是脑力知识,最重要的生产工具是什么?电脑. 在进行重要的脑力成果输出前,有必要先“利其器”,为自己打造一台专门为程序员而生的电脑生产平台.以保证自己高效地工作和产出. 本系统的主要适用群体为互联网行业的开发人员和环境配置指导,主要目的是让Mac成为程序员的重要的智力成果输出工具. 2   需求场景 3   开发环境 对于软件开发人员来说,基本上绝大多数的IDE都有