前言

在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 发布和部署( MacOS + Linux + Nginx )

  • 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自动注册服务相关推荐

  1. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)

    在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...

  2. .net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡

    大神张善友 分享过一篇 <.NET Core 在腾讯财付通的企业级应用开发实践>里面就是用.net core 和 Ocelot搭建的可扩展的高性能Api网关. Ocelot(http:// ...

  3. 利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路

    目前常见的web常规的负载均衡大多数是通过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的情况,但是这里往往出现的一个问题是,nginx上配置服务器的ip是固定的,如果某台 ...

  4. 基于Curator实现dubbo服务自动注册发现

    文章目录 概念 基于ServiceDiscovery实现服务自动注册和发现 Service:服务基本信息 InstanceDetails:封装实例用过来保存到zk中 ServiceProvider:服 ...

  5. zabbix===》微信报警、聚合图形、自动发现自动注册、监控NFS、MySQL、web服务、URL地址

    一.企业微信号申请 https://work.weixin.qq.com/ 1.注册 因为我们没有企业,所以我们选择组织. 下一步, 按需填好相应信息 2.配置微信企业号 设置好相应信息,后记录下企业 ...

  6. windows下ipv6 ddns 动态域名自动注册批处理 dynv6(服务方式,开机自动运行无需登录)

    现在IPV6加速推进,几乎限量的地址资源,但是ipv6地址比V4难记忆多了nnds(动态域名)就显得很有必要. 网文 免费好用的IPv6之DDNS服务-Openwrt上dynv6的使用介绍 该网文详细 ...

  7. Nacos如何实现服务自动注册

    1. 背景 接着上次的说,Nacos问题的分析.这次就来分享一下自己的分析方法.以及如何利用Spring事件完成服务注册. 2. 分析一下 2.1 问题分析过程 问题是这样的,我以为是Nacos服务注 ...

  8. 本地服务注册不上nacos_Nacos如何实现服务自动注册

    1. 背景 接着上次的说,Nacos问题的分析.这次就来分享一下自己的分析方法.以及如何利用Spring事件完成服务注册. 2. 分析一下 2.1 问题分析过程 问题是这样的,我以为是Nacos服务注 ...

  9. 深入源码理解.NET Core中Startup的注册及运行

    开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程序的起点.通过使用Startup,可以配置化处理所有向应用程序所做的请求的管道,同时也可 ...

最新文章

  1. Nginx + Tomcat 动静分离实现负载均衡
  2. opencv 3.1编译 linux,Ubuntu 编译安装 OpenCV 3.1
  3. python 多进程 循环_python 多进程读取同一个循环处理、可以用multiprocessing
  4. 通过已有SQL语句,生成数据库模型PDM
  5. 【51Nod - 1344】走格子 (思维)
  6. python名称空间与运用域_Python名称空间和作用域讲座,命名,Namespaces,Scopes
  7. 实现高性能稳定的socket tcp通讯经验分享
  8. (27)System Verilog设计UART接收
  9. 元素赋值、增加元素和删除元素
  10. android只有域名打包封装成apk,一个Android Studio工程根据网址打包出不同的apk
  11. Ubuntu中Scala下载
  12. 新gre考试用什么复习资料?
  13. pdf转word工具大全
  14. VMware ESXi 与ESX 产品之比较
  15. Java:判断是一年的第几天
  16. 邀请函|SOFA 四周年,开源正当时!
  17. 监控显示登录服务器超时,监控连接服务器超时怎么解决
  18. Linux学习06---shell基础
  19. 如何让计算机重新配置windows7,win7系统怎么设置电脑背景自动更换?
  20. html+css+js之20个练手小项目(一)

热门文章

  1. Java程序员应该知道的10个Eclipse调试技巧
  2. 如何在单个测试中同时执行多个断言
  3. 微信重磅更新!这个功能等了 7 年
  4. 如何通过 C# kill 指定进程?
  5. 防SQL注入的最好实现方式是什么?
  6. 微软面向初学者的机器学习课程:1.4-机器学习技术
  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(六)——一步一步教你如何撸Dapr之Actor服务...
  8. 毕业二十年,为什么人和人之间的差距那么大?
  9. 70%以上程序员,不懂数据结构和算法!
  10. 为什么这么忙,还依然做不好事情?