.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;

相关文章
相关标签/搜索