.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
相關文章:
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自动注册服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Visual Studio Code
- 下一篇: 我为什么用docker-compose来