1.先获取上下文中IServiceProvidersFeature服务功能
2.获得请求中的服务对象集合,找到IServiceProvider服务对象
3.从中获取目标服务
我在项目中遇到的情况举例:
在一个BaseController中获取当前用户的信息,通过构造函数注入可以实现但是增加了子类编码的负担,可以通过如下代码实现
var serviceProvidersFeature = HttpContext.Features.Get<IServiceProvidersFeature>();
var services = serviceProvidersFeature.RequestServices;
var service = (IServiceProvider)services.GetService(typeof(IServiceProvider));
using var redisClientsManager = (IRedisClientsManager)service.GetService(typeof(IRedisClientsManager));
using var client = redisClientsManager.GetReadOnlyClient();
var account = client.Get<AccountInfo>(Token);
return account;