zoukankan      html  css  js  c++  java
  • 自动注册服务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下, 

  • 相关阅读:
    类BufferedImage
    Fileltem
    文件上传api——MultipartFile
    热插播 devtools
    生成banner
    maven 配置
    配置java环境变量
    u盘如何恢复存储量
    四则运算
    PM
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5709751.html
Copyright © 2011-2022 走看看