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;