.NET Core扩展IServiceCollection自动注册服务


前言

在ASP.NET Core中使用依赖注入中使用很简单,只需在Startup类的ConfigureServices()方法中,通过IServiceCollection接口进行注入即可,其它的无需关心。

通过接口的Add*方法进行注册,代码如下:

1 public void ConfigureServices(IServiceCollection services)2 {3     services.AddSingleton<IUser, MyUser>();4 }

但是这样的注入方法多了之后,就会产生太多行的services.Add...方法,看着实在是不爽;

回想起MEF,只需要两个约定好的特性就可以完成注册和注入的声明,比起现在一行行注册方式,简直不要太好。

所以我对IServiceCollection接口进行了扩展,让它能与MEF类似的自动处理注册类型,而且支持通过多种方式进行注册。

我对接口进行了如下改造,让它支持特性(attribute)、类型(继承或接口)、名称、命名空间、程序集名等进行批量的注册。

展示一下特性注册,在ConfigureServices加入如下:

 

 services.Scan(scan => scan.FromAssemblyOf<IUser>().AddClasses().UsingAttributes());

 

这样就完成了对IUser所在程序集带有ServiceDescriptor特性的自动注册,并且可以通过ServiceLifetime进行生命周期管理:

public interface IUser
{      
     string Name { set; get; } }[ServiceDescriptor(typeof(IUser),ServiceLifetime.Transient)]public class MyUser : IUser { public string Name { set; get; } }

 

这样在使用ServiceProvoider.GetService(typeof(IUser)),就可以取到MyUser类型实例了。

以上只是演示了特性注入的方式,还有很多玩法,在Github上YOYO.Extensions.DI项目下:

https://github.com/maxzhang1985/YOYOFx/tree/master/AspNetCore/YOYO.Extensions.DI

 

YOYOFx还非常不完善,只完成了最基本的功能,不过我会坚持写下去,坚持开源,为开源社区做那么一点点的贡献。

GitHub:https://github.com/maxzhang1985/YOYOFx  如果觉还可以请Star下, 欢迎一起交流。

.NET Core 和 YOYOFx 的交流群: 214741894

相关文章:

原文地址:http://www.cnblogs.com/maxzhang1985/p/5703191.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...

1、微型计算机的显示器显示西文字符时&#xff0c;一般情况下一屏最多可显示( A )A、25行&#xff0c;每行80个字符 B、25行&#xff0c;每行60个字符C、20行&#xff0c;每行80个字符 D、20行&#xff0c;每行60个字符2、计算机中&#xff0c;一个浮点数由两部分组成&#xff…

dom4j读取XML文件内容

转载自 dom4j读取XML文件内容<?xml version"1.0" encoding"UTF-8"?> <RESULT> <VALUE><NO>A1234</NO><ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE><NO>B1234</NO><…

我为什么用docker-compose来打包开发环境

BUILD, SHIP, RUNDocker is the world’s leading software containerization platform Docker的出现&#xff0c;让虚拟技术更上一个台阶。更有Docker Hub作为docker images的市场载体&#xff0c;让全世界分享你的成果。 建议使用Docker for Mac(10.10.3) 或 Docker for Wind…

微型计算机使用键盘上的alt键称为,微型计算机使用的键盘上的Alt键称为_____。...

摘要&#xff1a;须牢盒安光缆固、微型装必整齐接头&#xff0c;信线规定《通路工程验范》收规&#xff0c;作伸必须两侧缩(。在交)米越时为(&#xff0c;微型信光)规途通缆线路工定《长程验范》收规。小净火栓光缆米架空距消距为的最&#xff0c;计算机使键盘t键信光)规途通缆…

java使用htmlparser提取网页纯文本例子

转载自 java使用htmlparser提取网页纯文本例子这篇文章主要介绍了java使用htmlparser提取网页纯文本例子,需要的朋友可以参考下package com.test; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filt…

java实现打印等腰三角形

package cn.jbit.nestedloops; import java.util.Scanner; /*** 输入行数打印等腰三角形*/ public class IsoTriangle {public static void main(String[] args) {int rows 0; //三角形行数System.out.print("请输入等腰三角形的行数&#xff1a;");Scanner input …

在.NET Core中使用MySQL5.7的JSON类型字段

Getting Started ① Adding pomelo myget feed into your NuGet.config which located in your solution root. <?xml version"1.0" encoding"utf-8"?><configuration><packageSources><add key"nuget.org" value"h…

中南大学计算机网.doc,中南大学计算机网络实验报告.doc

计算机网络实验报告0909122820周建权第第 PAGE \* MERGEFORMAT 1 页 共 NUMPAGES \* MERGEFORMAT 11 页计算机网络实验报告专业班级&#xff1a;信安1202班指导老师&#xff1a;王伟平姓 名&#xff1a;周建权学 号&#xff1a;0909122820实验二 网络路由层协议模拟实验网络路由…

Java实现HTML代码生成PDF文档

转载自 Java实现HTML代码生成PDF文档1、IText实现html2pdf&#xff0c;速度快&#xff0c;纠错能力差&#xff0c;支持中文&#xff08;要求HTML使用unicode编码&#xff09;&#xff0c;但中支持一种中文字体&#xff0c;开源。 2、Flying Sauser实现html2pdf&#xff0c;纠…

java实现九九乘法表的输出

package cn.jbit.nestedloops; /*** 打印九九乘法表*/ public class MulTable {public static void main(String[] args) {int rows 9; //乘法表的行数for(int i 1; i<rows; i){ //一共9行for(int j 1; j < i; j){ //第i行有i个式子System.out.print(j"*&q…

成人教育计算机统考分数查询江苏省,江苏省教育考试院查询

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到最新文章了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。注&#xff1a;本文转载自网络&#xff0c;不代表本平台立场&#xff0c;仅供读者参考&…

分布式系统事务一致性解决方案大对比,谁最好使?

“ 在分布式系统中&#xff0c;同时满足“一致性”、“可用性”和“分区容错性”三者是不可能的。分布式系统的事务一致性是一个技术难题&#xff0c;各种解决方案孰优孰劣&#xff1f; 老司机介绍 丁浪&#xff0c;现就职于某垂直电商平台&#xff0c;担任技术架构师。关注高并…

使用Java将HTML转成Word格式文件

转载自 使用Java将HTML转成Word格式文件 import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException;import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi.poifs.filesystem.Docum…

java百钱白鸡的算法

package cn.jbit.nestedloops;public class Chook {/*** 百钱买百鸡*/public static void main(String[] args) {int way 1; //买法int k 0; //雏鸡数for(int i1;i<20;i){ //公鸡数for(int j1;j<33;j){ //母鸡数k 100-i-j; //一共100只鸡if(k%3 0 && (5*i3…

.NET Core 工具遥测(应用信息收集)

说明&#xff1a;本文是个人翻译文章&#xff0c;由于个人水平有限&#xff0c;有不对的地方请大家帮忙更正。原文&#xff1a;.NET Core Tools Telemetry翻译&#xff1a;.NET Core 工具遥测&#xff08;应用信息收集&#xff09; .NET Core 工具遥测&#xff08;应用信息收集…

Jsoup学习总结

转载自 Jsoup学习总结摘要 Jsoup是一款比较好的Java版HTML解析器。可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。 jSOUP主要功能 从一个URL&#xff0c;文件或字符串中…

计算机发展阶段的划分是以什么作为标志,计算机以什么划分发展阶段

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。计算机是以电子元件来划分发展阶段的&#xff0c;即四个发展阶段&#xff0c;这就是人们通常所说的电子管、晶体管、集成电路、超大规模集成电路等四代。集成电路(integrated circui…

docker4dotnet #3 .net猿和小鲸鱼的苹果山之旅

.net猿遇到了小鲸鱼&#xff0c;觉得越来越兴奋。本来.net猿只是在透过家里那田子窗看外面的世界&#xff0c;但是看着海峡对岸的苹果园越来越茂盛&#xff0c;实在不想再去做一只宅猿了。于是&#xff0c;.net猿决定搭上小鲸鱼的渡轮到苹果园去看看。 .net猿上了小鲸鱼渡轮就先…

jsoup解析HTML用法小结

转载自 jsoup解析HTML用法小结使用HttpClientjsoup做采集器有一段时间了&#xff0c;发现jsoup很好用&#xff0c;而且还有很多方便的东西都没怎么用上。于是想根据官网上的cookbook来对jsoup的使用做个小结&#xff0c;或者是归纳。按功能分类做个列表&#xff0c;方便在写程…

java实现打印菱形

package cn.jbit.nestedloops; import java.util.Scanner; /*** 输入行数打印菱形*/ public class Diamond {public static void main(String[] args) {int rows 0; //菱形的行数Scanner input new Scanner(System.in);System.out.print("请输入菱形行数&#xff1a;&qu…