自动注册服务NET Core扩展IServiceCollection
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扩展IServiceCollection的更多相关文章
- 六、eureka客户端自动注册服务
所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 上一篇文章,我们稍微了解了一下eureka客户端是如何自动配置的,配置了哪些东西.在自动 ...
- .NET Core扩展IServiceCollection自动注册服务
前言 在ASP.NET Core中使用依赖注入中使用很简单,只需在Startup类的ConfigureServices()方法中,通过IServiceCollection接口进行注入即可,其它的无需关 ...
- thinkphp5 自动注册Hook机制钩子扩展
Hook.php 文件已更新1.修复在linux环境下类的 \ 在basename 下无法获取到类名的问题2.修复linux 环境下无法使用hook::call 调用失败问题 请先安装thinkphp ...
- 如何在Windows Server 2008 R2 SP1安装Redis-x64-3.2.100,并且自动注册服务
1.官网:http://redis.io/ 2.下载地址:https://github.com/MSOpenTech/redis/releases 3.最新的安装包: 4.点击msi文件开始安装. 5 ...
- Ocelot + Consul + Registrator 基于Docker 实现服务发现、服务自动注册
目录 1. Consul集群搭建 1.1 F&Q Consul官方推荐的host网络模式运行 2. Registrator服务注册工具 2.1 F&Q Registrator悬挂服务 ...
- .Net Core Grpc Consul 实现服务注册 服务发现 负载均衡
本文是基于..net core grpc consul 实现服务注册 服务发现 负载均衡(二)的,很多内容是直接复制过来的,..net core grpc consul 实现服务注册 服务发现 负载均 ...
- Asp.net core 向Consul 注册服务
Consul服务发现的使用方法:1. 在每台电脑上都以Client Mode的方式运行一个Consul代理, 这个代理只负责与Consul Cluster高效地交换最新注册信息(不参与Leader的选 ...
- .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...
- 解析 .Net Core 注入 (1) 注册服务
在学习 Asp.Net Core 的过程中,注入可以说是无处不在,对于 .Net Core 来说,它是独立的一个程序集,没有复杂的依赖项和配置文件,所以对于学习 Asp.Net Core 源码的朋友来 ...
随机推荐
- html中的表格 bootstrap-table
1 bootstrap-table 官网: http://bootstrap-table.wenzhixin.net.cn/ 2
- go pprof
import _ "net/http/pprof" func main() { go func() { http.ListenAndServe("localhost:60 ...
- 九章算法系列(#2 Binary Search)-课堂笔记
前言 先说一些题外的东西吧.受到春跃大神的影响和启发,推荐了这个算法公开课给我,晚上睡觉前点开一看发现课还有两天要开始,本着要好好系统地学习一下算法,于是就爬起来拉上两个小伙伴组团报名了.今天听了第一 ...
- GDAL的RASTERIO功能
为了能快速的显示大影像,最近一直在学习GDAL,GDAL确实是一个功能强大的开源库,其核心部分数据集和波段,下面这个图很详细的描述了它们之间的关系,还有其中的细节: GDAL ...
- Git 介绍
一,理解 Git 1,分布式版本控制 Git 版本控制系统的设计思想是"去中心化".传统的 CVS .SVN 等工具采用的是 C/S 架构,只有一个中心代码仓库,位于服务器端.而一 ...
- linux shell命令行下操作mysql 删除mysql指定数据库下的所有表--亲测成功百分百测试通过--绝对可靠
1,在shell提示符下查看mysql指定数据库下的表等数据
- 改变DM6467的内存划分
上次改过bbxm的http://blog.csdn.net/godofdsp/article/details/9377515,这次搞6467又遇到同样的问题了.按照bbxm的方法修改了内存划分,运行时 ...
- hdu 2059 龟兔赛跑(dp)
龟兔赛跑 Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击——赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成 ...
- .NET委托:一个关于C#的睡前故事 【转】
紧耦合 从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺.但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒.但是彼得又不想让老板呆 ...
- 委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件【转】
1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象.一个委 ...