.NET Core扩展IServiceCollection自动注册服务
前言
在ASP.NET Core中使用依賴注入中使用很簡單,只需在Startup類的ConfigureServices()方法中,通過IServiceCollection接口進(jìn)行注入即可,其它的無需關(guān)心。
通過接口的Add*方法進(jìn)行注冊(cè),代碼如下:
1 public void ConfigureServices(IServiceCollection services)2 {3 services.AddSingleton<IUser, MyUser>();4 }但是這樣的注入方法多了之后,就會(huì)產(chǎn)生太多行的services.Add...方法,看著實(shí)在是不爽;
回想起MEF,只需要兩個(gè)約定好的特性就可以完成注冊(cè)和注入的聲明,比起現(xiàn)在一行行注冊(cè)方式,簡直不要太好。
所以我對(duì)IServiceCollection接口進(jìn)行了擴(kuò)展,讓它能與MEF類似的自動(dòng)處理注冊(cè)類型,而且支持通過多種方式進(jìn)行注冊(cè)。
我對(duì)接口進(jìn)行了如下改造,讓它支持特性(attribute)、類型(繼承或接口)、名稱、命名空間、程序集名等進(jìn)行批量的注冊(cè)。
展示一下特性注冊(cè),在ConfigureServices加入如下:
?
services.Scan(scan => scan.FromAssemblyOf<IUser>().AddClasses().UsingAttributes());?
這樣就完成了對(duì)IUser所在程序集帶有ServiceDescriptor特性的自動(dòng)注冊(cè),并且可以通過ServiceLifetime進(jìn)行生命周期管理:
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類型實(shí)例了。
以上只是演示了特性注入的方式,還有很多玩法,在Github上YOYO.Extensions.DI項(xiàng)目下:
https://github.com/maxzhang1985/YOYOFx/tree/master/AspNetCore/YOYO.Extensions.DI
?
YOYOFx還非常不完善,只完成了最基本的功能,不過我會(huì)堅(jiān)持寫下去,堅(jiān)持開源,為開源社區(qū)做那么一點(diǎn)點(diǎn)的貢獻(xiàn)。
GitHub:https://github.com/maxzhang1985/YOYOFx? 如果覺還可以請(qǐng)Star下, 歡迎一起交流。
.NET Core 和 YOYOFx 的交流群:?214741894
相關(guān)文章:
ASP.NET Core 介紹
通過幾個(gè)Hello World感受.NET Core全新的開發(fā)體驗(yàn)
.NET Core系列 : 1、.NET Core 環(huán)境搭建和命令行CLI入門
Asp.Net Core 發(fā)布和部署( MacOS + Linux + Nginx )
Asp.Net Core 發(fā)布和部署(Linux + Jexus )
ASP.NET Core Docker部署
ASP.NET Core "完整發(fā)布,自帶運(yùn)行時(shí)" 到j(luò)exus
全球首發(fā)免費(fèi)的MySql for Entity Framework Core
ASP.NET Core開發(fā)-使用Nancy框架
.NET Core全新路線圖
ubuntu16.4下用jexus部署asp.net core rtm
原文地址:http://www.cnblogs.com/maxzhang1985/p/5703191.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的.NET Core扩展IServiceCollection自动注册服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Visual Studio Code
- 下一篇: asp.net ajax控件工具集 Au