.Net Core如何在程序的任意位置使用和注入服務

最近有人問我:我該如何在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;

相關文章
相關標籤/搜索