TelemetryConfiguration

TelemetryConfiguration

我正在构建一个ASP.NET Core 2.1应用程序。对于应用程序洞察遥测,我有我的自定义类,但我也想使用内置的ITelemetryInitializer。启用自动交叉布线后,Simple Injector是否可以自动解决这些依赖性?

更新

我尝试了下面的代码,并得到如下所示的错误。我不确定自动交叉布线还应该如何工作。

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已注册为“异步范围”
  生活方式,但实例是在
  有效(异步作用域)作用域。”


谢谢

最佳答案

此问题是由用于简单注入器的ASP.NET Core集成包4.3.0版本中的a bug引起的。

由于该错误,即使依赖项为Singleton,也只能在活动的Scope上下文中解决任何自动交叉依赖项。 TelemetryConfigurationSingleton

当明确交叉连接该依赖项时(即使用container.CrossWire<TelemetryConfiguration>(app)),该问题就会消失,因为CrossWire确实允许在活动范围之外解决Singletons

该问题已在集成软件包的patch release 4.3.1中解决。在此版本中,您可以在活动的Web请求或简单注入器TelemetryConfiguration的上下文之外解析Scope

但是,如果交叉连接服务是TransientScoped,则仍然需要有一个活动的Web请求,或者,如果是在后台线程上运行,则需要一个活动的Simple Injector Scope

07-24 21:28