【发布时间】:2021-02-18 00:46:49
【问题描述】:
我有一个在其构造函数中接受访问令牌的 api 客户端
public class ApiClient : IApiClient
{
public ApiClient(string accessToken)
}
要获得该 api 令牌,我需要创建另一个类的实例并调用方法 GetTokenAsync()
public class TokenClient
{
public Task<string> GetTokenAsync();
}
现在我想将IApiClient 注入我的TestService
public class TestService
{
public TestService(IApiClient client)
}
但是不能以这种方式注册实例
services.AddScoped<IApiClient,ApiClient>(async x=>
{
tokenClient = x.GetService<TokenClient>();
var token = await tokenClient.GetTokenAsync();
return new ApiClient(token);
}
为了克服我创建了ApiClientProvider 类
public class ApiClientProvider()
{
public async Task<IApiClient> GetClientAsync()
{
tokenClient = x.GetService<TokenClient>();
var token = await tokenClient.GetTokenAsync();
return new ApiClient(token);
}
}
现在我将它注入TestService
但在每种方法中我都必须使用
IApiClient apiClient= await _apiClientProvider.GetClientAsync();
我不喜欢这段代码,我更喜欢注入依赖项而不是在每个函数中解析,但是我看不到任何解决方法。您能否告知是否可以将其移至注册或不应该去那里。
【问题讨论】:
-
这不能回答你的问题吗? stackoverflow.com/a/43240576/7718439
标签: c# .net .net-core dependency-injection