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