Простое использование инжектора с помощью UseApplicationInsights / AddApplicationInsights в ASP.NET Core - PullRequest
0 голосов
/ 06 июля 2018

Я создаю приложение ASP.NET Core 2.1. Для телеметрии приложений Insight у меня есть свой собственный класс, но я также хочу использовать встроенные ITelemetryInitializer. Разве Simple Injector автоматически разрешает эти зависимости, когда включена автоматическая перекрестная проводка?

UPDATE

Я попробовал приведенный ниже фрагмент кода и получил ошибку, как показано ниже. Я не уверен, как еще должна работать Auto Crosswiring.

container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IControllerActivator>(
    new SimpleInjectorControllerActivator(container));

services.EnableSimpleInjectorCrossWiring(container);
services.UseSimpleInjectorAspNetRequestScoping(container); 

container.AutoCrossWireAspNetComponents(app);

services.AddApplicationInsightsTelemetry(
    applicationInsightsLoggerConfig.InstrumentationKey);

var test = Container.GetInstance<TelemetryConfiguration>();

Зарегистрированный делегат для типа TelemetryConfiguration бросил исключение. Зарегистрированный делегат для типа IServiceScope бросил исключение. IServiceScope зарегистрирован как «Async Scoped» образ жизни, но экземпляр запрашивается вне контекста активная (асинхронная область) область действия. '

Спасибо

1 Ответ

0 голосов
/ 06 июля 2018

Эта проблема вызвана ошибкой в версии 4.3.0 пакета интеграции ASP.NET Core для Simple Injector.

Из-за ошибки любая автоматическая перекрестная зависимость может только быть разрешена в контексте активной области действия, даже если зависимость Singleton. TelemetryConfiguration - это Singleton.

При явном перекрестном соединении этой зависимости (то есть с использованием container.CrossWire<TelemetryConfiguration>(app)) проблема исчезнет, ​​поскольку CrossWire позволяет разрешить Singletons вне активной области.

Проблема была решена в выпуске патча 4.3.1 пакета интеграции. В этой версии вы можете разрешить TelemetryConfiguration вне контекста активного веб-запроса или простого инжектора Scope.

В случае, если кросс-проводная служба, однако, Transient или Scoped, вам все равно нужно либо иметь активный веб-запрос, либо, в случае выполнения в фоновом потоке, активный простой инжектор Scope .

...