最近有人問我:我該如何在Startup類以外的地方注入個人服務呢,都寫在startup裏看着好亂;我該如何在程序的其餘地方獲取我注入的服務呢;ide
故我寫了這篇博客,文中有不對的地方歡迎指正。函數
1、如何在Stratup類外注入服務this
首先,咱們看startup類的ConfigureServices方法,咱們會發現咱們全部的服務都是使用IServiceCollection注入進去的spa
因此咱們在其餘地方進行注入依然是使用這個接口進行注入,話很少說,上源碼3d
咱們首先定義一個靜態類,而後在靜態類內寫一個IServiceCollection的擴展方法,這樣咱們就能夠在這進行和startup裏同樣注入了。code
public static class ServiceConfiguration { public static IServiceCollection ConfigServies(this IServiceCollection service) { service.AddTransient<INavigation, NavigationLogic>(); service.AddTransient<IUserInfo, UserInfoLogic>(); return service; } }
靜態類寫完後,咱們只須要在staatup中注入咱們擴展的這個靜態類就能夠使用這個類中所注入的服務了。blog
這樣咱們就在能夠拿到ServiceConfiguration類中所注入的全部服務了。接口
2、如何在程序的任何地方拿到我所注入的服務。get
.NET Core默認的注入是使用構造函數的,若是咱們想在任意 的地方拿到服務,咱們須要使用IServiceProvider接口源碼
咱們定義一個靜態類,而後定義一個IServiceProvider靜態屬性
public static class CZHttpContext { public static IServiceProvider ServiceProvider{get;set;}; }
而後咱們在starup中把他注入進去
使用方法,
var dbContext = CZHttpContext.ServiceProvider.GetService(typeof(CZDbContext)) as CZDbContext;
這樣咱們就能獲取出上圖在startup中注入的CZDbContext;