zoukankan      html  css  js  c++  java
  • .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 .NET Core跨平台 

    如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

  • 相关阅读:
    PHP中获取当前页面的URL信息
    $_POST和$GLOBALS['HTTP_RAW_POST_DATA'] 的区别
    curl模拟ip和来源进行网站采集的实现方法
    mysql修改root密码的几种方法
    微信小程序实现支付功能
    git获取远程服务器的指定分支
    mysql函数技巧整理
    sql 查询目标数据库中所有的表以其关键信息
    SET NOCOUNT ON
    C# CultureInfo中常用的InvariantCulture
  • 原文地址:https://www.cnblogs.com/maxzhang1985/p/5703191.html
Copyright © 2011-2022 走看看