专栏首页ASP.NETCore.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下, 欢迎一起交流。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ASP.NET Core中的ActionFilter与DI

      前几篇文章都是讲ASP.NET Core MVC中的依赖注入(DI)与扩展点的,也许大家都发现在ASP.NET CORE中所有的组件都是通过依赖注入来扩展的...

    yoyofx
  • MVVM绑定多层级数据到TreeView并设置项目展开

    昨天在做项目的时候碰到了这个问题,发现通常我们定义的数据不法绑定到控件上,接下来我将讲一下我是怎么解决这个问题的。

    yoyofx
  • 动手实现扩展属性为对象动态添加获取数据

    由于项目需要常常会遇到为某一个对象动态添加属性的情况,而以前我的实现方式是创建一个字典用于存放对象实例和它的值,但是往往光这么做是不够的,例如想在对象的某个属...

    yoyofx
  • CentOS7下Firewall一些基本常用命令

    一、介绍  防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 fir...

    拓荒者
  • ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法

    在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注...

    蒋金楠
  • FMDB 使用注意点

    关于FMDB最基本的使用我们就不在说了,这个网上大把的文章介绍,我就在这里总结几点我最近在写一个小东西的时候注意到的一点点东西:

    Mr.RisingSun
  • Unsafe 源码分析

    Unsafe 是用于在实质上扩展 Java 语言表达能力、便于在 Java 代码里实现原本要在 C 层实现的核心库功能用的。这些功能包括裸内存的申请、释放、访问...

    itliusir
  • Intent传递对象的两种方法

    听着music睡
  • Spark 与 Hadoop 学习笔记 介绍及对比

    这篇博客将会简单记录Hadoop与Spark对比,HDFS,MapReduce的基本概念,及Spark架构设计,RDD,运行模式。整理起来一起阅读方便我们理解整...

    大鹅
  • 睿赛德科技(RT-Thread)宣布完成A轮融资

    6月12日消息,国内领先的物联网操作系统RT-Thread暨睿赛德科技宣布,公司获得君联资本的数百万美金A轮投资。本轮融资距上一次公司获得天使轮融资仅一年时间不...

    用户1605515

扫码关注云+社区

领取腾讯云代金券