.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跨平台或扫描二维码关注
- .NET Core扩展IServiceCollection自动注册服务
- 扩展entity framework core 实现默认字符串长度,decimal精度,entity自动注册和配置
- 扩展entity framework core实现默认字符串长度,decimal精度,entity自动注册和配置
- .net core注入服务
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
- Asp.Net Core-用户注册
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
- .net2.0注册扩展服务
- asp.net core 对HttpContext 的扩展
- .NET Core下的文件文档服务
- C# Windows服务自动安装与注册
- SOA中间件 - 服务自动注册与发现
- zookeeper搭建服务自动注册与监控
- .net core 自动生成EF代码
- 用COM自动服务扩展功能
- 微软BUG Bounty悬赏项目扩展至.NET Core和ASP.NET Core
- GeoServer源码解析和扩展 (二)注册服务
- GeoServer源码解析和扩展 (二)注册服务
- .NET Core 工具遥测(应用信息收集)
- 分布式系统事务一致性解决方案大对比,谁最好使?
- 在.NET Core中使用MySQL5.7的JSON类型字段
- 我为什么用docker-compose来打包开发环境
- 生活随意行,创新看我的,带给你不一样的千牛登陆
- .NET Core扩展IServiceCollection自动注册服务
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo
- Conway's law(康威定律)
- ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步
- IronPython死而复生
- Visual Studio “15”第三个预览版发布
- ASP.NET MVC @helper使用说明
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药