Создать экземпляр ILogger в автозагрузке - PullRequest
0 голосов
/ 02 апреля 2020

Я работаю над Azure Приложение функции. net ядро ​​3.1 с повторной попыткой Полли и автоматическим выключателем. до сих пор у меня не было проблем с регистрацией деталей в App Insights с использованием компоновщика, потому что он не инициализируется до выполнения, как показано ниже

    private static void AddPoliciesAsync(this IHttpClientBuilder builder)
    {
        builder.AddPolicyHandler((service, request) =>
        GetRetryAsyncPolicy(service.GetService<ILogger<HTTPTrigger1>>()).WrapAsync(
        GetCircuitBreakerAsyncPolicy(service.GetService<ILogger<HTTPTrigger1>>())));
    }

Где HTTPTrigger1 - имя приложения функции для тестирования. Теперь мне нужно расширить существующую функциональность, чтобы проверить, не нарушена ли схема или нет, чтобы я мог запустить другой набор бизнес-функций. Для этого, как упомянуто здесь https://github.com/App-vNext/Polly#circuit -breaker , я добавил одноэлементный экземпляр CB, чтобы убедиться, что я читаю состояние автоматического выключателя.

        var logger = services.BuildServiceProvider().GetService<ILogger<HTTPTrigger1>>();
        var circuitBreaker = GetCircuitBreakerAsyncPolicy(logger);
        services.AddSingleton(circuitBreaker as ICircuitBreakerPolicy<HttpResponseMessage>);
        services.AddHttpClient("name", client =>
        {
            // something
        })
        .AddPollyPolicies(logger, circuitBreaker);

Но получаю ошибку при получении экземпляра регистратора на второй реализации. Как я отмечал в MS документах https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#caveats говорит, что не регистрировать сообщение во время запуска, даже если создается экземпляр, он по-прежнему выдает ошибку (которая требуется для последующих вызовов). В любом случае я могу добиться регистрации здесь?

1 Ответ

0 голосов
/ 02 апреля 2020

Почему бы просто не использовать заводскую перегрузку AddSingleton?

services.AddSingleton(sp => {
    var logger = sp.GetService<ILogger<HTTPTrigger1>>();
    var circuitBreaker = GetCircuitBreakerAsyncPolicy(logger);
    return circuitBreaker as ICircuitBreakerPolicy<HttpResponseMessage>;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...