.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
相关文章:
ASP.NET Core 介绍
通过几个Hello World感受.NET Core全新的开发体验
.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
Asp.Net Core 发布和部署(Linux + Jexus )
ASP.NET Core Docker部署
ASP.NET Core "完整发布,自带运行时" 到jexus
全球首发免费的MySql for Entity Framework Core
ASP.NET Core开发-使用Nancy框架
.NET Core全新路线图
ubuntu16.4下用jexus部署asp.net core rtm
原文地址:http://www.cnblogs.com/maxzhang1985/p/5703191.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
.NET Core扩展IServiceCollection自动注册服务相关推荐
- .net core grpc consul 实现服务注册 服务发现 负载均衡(二)
在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...
- .net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡
大神张善友 分享过一篇 <.NET Core 在腾讯财付通的企业级应用开发实践>里面就是用.net core 和 Ocelot搭建的可扩展的高性能Api网关. Ocelot(http:// ...
- 利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路
目前常见的web常规的负载均衡大多数是通过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的情况,但是这里往往出现的一个问题是,nginx上配置服务器的ip是固定的,如果某台 ...
- 基于Curator实现dubbo服务自动注册发现
文章目录 概念 基于ServiceDiscovery实现服务自动注册和发现 Service:服务基本信息 InstanceDetails:封装实例用过来保存到zk中 ServiceProvider:服 ...
- zabbix===》微信报警、聚合图形、自动发现自动注册、监控NFS、MySQL、web服务、URL地址
一.企业微信号申请 https://work.weixin.qq.com/ 1.注册 因为我们没有企业,所以我们选择组织. 下一步, 按需填好相应信息 2.配置微信企业号 设置好相应信息,后记录下企业 ...
- windows下ipv6 ddns 动态域名自动注册批处理 dynv6(服务方式,开机自动运行无需登录)
现在IPV6加速推进,几乎限量的地址资源,但是ipv6地址比V4难记忆多了nnds(动态域名)就显得很有必要. 网文 免费好用的IPv6之DDNS服务-Openwrt上dynv6的使用介绍 该网文详细 ...
- Nacos如何实现服务自动注册
1. 背景 接着上次的说,Nacos问题的分析.这次就来分享一下自己的分析方法.以及如何利用Spring事件完成服务注册. 2. 分析一下 2.1 问题分析过程 问题是这样的,我以为是Nacos服务注 ...
- 本地服务注册不上nacos_Nacos如何实现服务自动注册
1. 背景 接着上次的说,Nacos问题的分析.这次就来分享一下自己的分析方法.以及如何利用Spring事件完成服务注册. 2. 分析一下 2.1 问题分析过程 问题是这样的,我以为是Nacos服务注 ...
- 深入源码理解.NET Core中Startup的注册及运行
开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程序的起点.通过使用Startup,可以配置化处理所有向应用程序所做的请求的管道,同时也可 ...
最新文章
- Nginx + Tomcat 动静分离实现负载均衡
- opencv 3.1编译 linux,Ubuntu 编译安装 OpenCV 3.1
- python 多进程 循环_python 多进程读取同一个循环处理、可以用multiprocessing
- 通过已有SQL语句,生成数据库模型PDM
- 【51Nod - 1344】走格子 (思维)
- python名称空间与运用域_Python名称空间和作用域讲座,命名,Namespaces,Scopes
- 实现高性能稳定的socket tcp通讯经验分享
- (27)System Verilog设计UART接收
- 元素赋值、增加元素和删除元素
- android只有域名打包封装成apk,一个Android Studio工程根据网址打包出不同的apk
- Ubuntu中Scala下载
- 新gre考试用什么复习资料?
- pdf转word工具大全
- VMware ESXi 与ESX 产品之比较
- Java:判断是一年的第几天
- 邀请函|SOFA 四周年,开源正当时!
- 监控显示登录服务器超时,监控连接服务器超时怎么解决
- Linux学习06---shell基础
- 如何让计算机重新配置windows7,win7系统怎么设置电脑背景自动更换?
- html+css+js之20个练手小项目(一)