自動注冊服務NET Core擴展IServiceCollection


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下, 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM