Для RetryAttribute у меня есть (этот класс находится в общей библиотеке классов, поскольку решение имеет несколько проектов, которые должны иметь возможность его использовать):
Код: Выделить всё
public class RetryAttribute : OverrideMethodAspect
{
[IntroduceDependency]
private readonly ILogger _logger;
[IntroduceDependency]
private readonly IResiliencePipelineFactory _resiliencePipelineFactory;
[IntroduceDependency]
private readonly IRetryHttpConfiguration _retryHttpConfiguration;
public StrategyKind Kind { get; }
public RetryAttribute(StrategyKind kind)
{
Kind = kind;
}
public override dynamic? OverrideMethod() { ... }
public override async Task OverrideAsyncMethod() { ... }
}
Код: Выделить всё
services.AddSingleton(_ => Log.Logger);
services.AddSingleton(dataflowConfiguration.RetryHttpConfiguration);
services.AddSingleton();
Код: Выделить всё
public class ApiClient(ILogger logger, HttpClient httpClient)
{
public async Task SendMessagesToClient(IEnumerable messages)
{
using (var request = CreateDefaultRequestMessageWithCustomData())
{
// Setup `request` properties
response = await SendMessageWithRetry(request);
// Process `response`
}
}
[Retry(StrategyKind.RetryWithFallback)]
private async Task SendMessageWithRetry(HttpRequestMessage request)
{
var response = await _httpClient.SendAsync(request);
return response;
}
Код: Выделить всё
- Message: Value cannot be null. (Parameter 'resiliencePipelineFactory')
- Stack Trace: at Company.Product.Shared.ApiClients.ApiClient..ctor(ILogger logger, HttpClient httpClient, IResiliencePipelineFactory resiliencePipelineFactory, IRetryHttpConfiguration retryHttpConfiguration)
at Company.Product.Shared.Helpers.Helper.CreateApiClient(ILogger logger, IConfidentialClientApplication confidentialClient) in C:\Product\Company\Product\Company.Product\src\Company.Product.Shared\Helpers\Helper.cs:line 55
Кроме того, в сообщении об исключении показаны 4 параметра для класса ApiClient (
Код: Выделить всё
ILoggerНужно ли мне явно определять два дополнительных параметра (т. е. IResiliencePipelineFactory и IRetryHttpConfiguration) в конструкторе ApiClient? Если да, то как их следует хранить/передавать в RetryAttribute, поскольку сам класс ApiClient не использует эти два параметра?
Это моя первая попытка использования Metalama, поэтому я, вероятно, упускаю/неправильно понимаю что-то базовое, поэтому буду очень признателен за любую помощь/руководство.
Подробнее здесь: https://stackoverflow.com/questions/798 ... properties