У меня есть веб-приложение MVC, и я использую Simple Injector для DI. Почти весь мой код покрыт юнит-тестами. Однако теперь, когда я добавил несколько вызовов телеметрии в некоторые контроллеры, у меня возникли проблемы с настройкой зависимостей.
Телеметрические вызовы предназначены для отправки метрик в службу Application Insights, расположенную в Microsoft Azure. Приложение не работает в Azure, просто сервер с ISS. Портал ИИ расскажет вам все о вашем приложении, включая любые пользовательские события, которые вы отправляете с помощью библиотеки телеметрии. В результате для контроллера требуется экземпляр Microsoft.ApplicationInsights.TelemetryClient, который не имеет интерфейса и представляет собой закрытый класс с двумя конструкторами. Я попытался зарегистрировать это так (гибридный образ жизни не связан с этим вопросом, я просто включил его для полноты):
// hybrid lifestyle that gives precedence to web api request scope
var requestOrTransientLifestyle = Lifestyle.CreateHybrid(
() => HttpContext.Current != null,
new WebRequestLifestyle(),
Lifestyle.Transient);
container.Register<TelemetryClient>(requestOrTransientLifestyle);
Проблема в том, что, поскольку TelemetryClient имеет 2 конструктора, SI жалуется и не проходит проверку. Я нашел сообщение, показывающее, как переопределить поведение разрешения конструктора контейнера, но это кажется довольно сложным. Сначала я хотел сделать резервную копию и задать этот вопрос:
Если я не сделаю TelemetryClient внедренной зависимостью (просто создаю новую в классе), будет ли эта телеметрия отправляться в Azure при каждом запуске модульного теста, создавая много ложных данных? Или Application Insights достаточно умен, чтобы знать, что он выполняется в модульном тесте, а не отправлять данные?
Любые "идеи" по этому вопросу будут высоко оценены!
Спасибо