#asp.net-core #dependency-injection #azure-application-insights
Вопрос:
Я пытаюсь реализовать пользовательский ITelemetryInitializer
( UserTelemetryInitialiser
), который присоединяет некоторые пользовательские метаданные к сообщениям app insights, и я получаю следующую циклическую зависимость.
UserTelemetryInitialiser
переходит в кэш пользователей, который зависит от IMemoryCache
того, как реализовано Microsoft.Extensions.Caching.Memory.MemoryCache
. MemoryCache
затем зависит от ILoggerFactory
(реализуется Microsoft.Extensions.Logging.LoggerFactory
) и LoggerFactory
в конечном итоге зависит от TelemetryConfiguration
.
Итак, у меня есть эта (укороченная) круговая цепочка: TelemetryConfiguration
-> > UserTelemetryInitialiser
-> > MyUserCache
-> > MemoryCache
-> > LoggerFactory
-> > TelemetryConfiguration
.
Есть какие-нибудь идеи о том, как это решить?
Я использую ASP.NET Ядро 5.0 с Microsoft.Области применения.AspNetCore 2.18.0.
ИЗМЕНИТЬ: Мой упрощенный инициализатор выглядит следующим образом (где IHttpContextAccessor
используется для получения удостоверения пользователя):
public class UserTelemetryInitialiser : ITelemetryInitializer
{
private readonly IHttpContextAccessor contextAccessor;
private readonly IMemoryCache cache;
public UserTelemetryInitialiser(IHttpContextAccessor contextAccessor, IMemoryCache cache)
{
this.contextAccessor = contextAccessor;
this.cache = cache;
}
public void Initialize(ITelemetry telemetry)
{
}
}
Комментарии:
1. Зачем вам нужно кэшировать абстракцию телеметрии? Что вы кэшируете?
2. У меня есть кэш моих пользователей, и я хочу получить доступ к этому кэшу,
MyUserTelemetryInitializer
чтобы я мог прикрепить роль пользователя к сообщениям app insights (системный администратор, суперпользователь и т. Д.).3. Я не уверен, но если это сработает, я могу опубликовать хорошо структурированный улучшенный ответ — внедрить
IServiceProvider
в ваш класс и использоватьservices.GetRequiredService<IMemoryCache>()
— это работает?4. У меня есть инициализатор телеметрии, который использует тот же кэш, но не имеет никаких проблем. Как выглядит инициализатор?
5. @PeterBons Я обновил свой вопрос, чтобы показать, на что похож инициализатор (это упрощенная версия реальной вещи, которая все еще демонстрирует проблему)