在ASP.NET Core中使用依賴注入中使用很簡單,只需在Startup類的ConfigureServices()方法中,經過IServiceCollection接口進行注入便可,其它的無需關心。git
經過接口的Add*方法進行註冊,代碼以下:github
1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.AddSingleton<IUser, MyUser>(); 4 }
可是這樣的注入方法多了以後,就會產生太多行的services.Add...方法,看着實在是不爽;ide
回想起MEF,只須要兩個約定好的特性就能夠完成註冊和注入的聲明,比起如今一行行註冊方式,簡直不要太好。post
因此我對IServiceCollection接口進行了擴展,讓它能與MEF相似的自動處理註冊類型,並且支持經過多種方式進行註冊。spa
我對接口進行了以下改造,讓它支持特性(attribute)、類型(繼承或接口)、名稱、命名空間、程序集名等進行批量的註冊。code
展現一下特性註冊,在ConfigureServices加入以下:blog
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
若是你以爲本文對你有幫助,請點擊「推薦」,謝謝。