如何在自定义 TelemetryInitializer 中注入依赖项?

Par*_*aco 5 autofac telemetry azure-application-insights

我们正在使用 Autofac 4 进行 DI,不久前我开始试验 AI。现在我创建了一个 IdentityTelemetryInitializer 类,它需要 IIdentityProvider 才能获取当前授权用户的 ID 并将其添加到上下文中。我找不到将依赖项注入 TelemetryInitializer 的方法。如果我定义了一个采用 IIdentityProvider 的构造函数,则完全跳过自定义初始值设定项。欢迎任何想法。我正在考虑将用户 ID 也设置为线程主体,以便我们可以通过这种方式访问​​它,但我希望我可以为此使用 DI?

yon*_*sha 0

您不能使用构造函数注入依赖项,因为初始化程序使用默认(空)构造函数在内部初始化。当您显式定义一个新的构造函数时,您实际上已经“删除”了默认的构造函数,因此正如您所提到的,初始化程序被完全跳过。

因此,唯一的方法是在应用程序启动时注册它们之后,在“初始化”方法期间解决依赖关系。

ctx.RegisterType<MyService>().As<IService>().AsSelf(); // on application startup
ctx.Resolve<IService>(); // during initializer 'Initialize' method
Run Code Online (Sandbox Code Playgroud)