.NET Core扩展IServiceCollection自动注册服务

来源:互联网 发布:vscode 选中一个词 编辑:程序博客网 时间:2024/06/06 05:57


前言

在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跨平台或扫描二维码关注

阅读全文
0 0
原创粉丝点击