You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Application Insights:遥测处理器注入TelemetryClient引发循环问题

问题原因

直接在ITelemetryProcessorFactory的注册委托中请求TelemetryClient会触发循环依赖:

  • TelemetryClient的初始化依赖TelemetryProcessorChain
  • TelemetryProcessorChain又依赖ITelemetryProcessorFactory
  • 你的代码在Factory创建时立即请求TelemetryClient,导致DI容器陷入无限的服务解析循环
解决方法

方法1:通过TelemetryConfiguration创建独立的TelemetryClient

绕开容器中现成TelemetryClient的循环依赖,手动用配置实例创建一个:

services.AddSingleton<Microsoft.ApplicationInsights.AspNetCore.ITelemetryProcessorFactory>(builder =>
{
    var config = builder.GetRequiredService<TelemetryConfiguration>();
    var telemetryClient = new TelemetryClient(config);
    return new MyCustomProcessor(telemetryClient);
});

方法2:在处理器内部延迟获取TelemetryClient

如果处理器不需要在构造阶段就使用TelemetryClient,可以注入IServiceProvider,在实际需要时再获取:

public class MyCustomProcessor : ITelemetryProcessor
{
    private readonly IServiceProvider _serviceProvider;
    private TelemetryClient _telemetryClient;

    public MyCustomProcessor(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    public void Process(ITelemetry item)
    {
        _telemetryClient ??= _serviceProvider.GetRequiredService<TelemetryClient>();
        // 这里使用_telemetryClient处理指标
        // ...
        // 必须调用下一个处理器,否则会中断遥测流转
        // _next.Process(item);
    }
}

// 注册时注入IServiceProvider
services.AddSingleton<Microsoft.ApplicationInsights.AspNetCore.ITelemetryProcessorFactory>(builder =>
{
    var sp = builder.GetRequiredService<IServiceProvider>();
    return new MyCustomProcessor(sp);
});

关键注意点

  • 若你的处理器属于遥测链环节,务必在Process方法末尾调用下一个处理器的Process方法,否则会导致后续遥测无法正常上报
  • 手动创建TelemetryClient时,要确保使用容器中配置好的TelemetryConfiguration实例,避免丢失自定义的AI配置

内容的提问来源于stack exchange,提问作者Leonardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:42:08