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

如何在ASP.NET Core中通过自定义配置类配置Application Insights

问题

我的应用使用Azure App Configuration提供配置值,已在ASP.NET Core启动流程中完成配置,且已将MyAppConfig单例注入服务容器:

serviceCollection.AddSingleton<MyAppConfig>();

现在我希望使用该配置对象中的值来配置Application Insights,但在启动过程中无法从服务提供程序获取MyAppConfig服务。我找到微软文档提及可使用IConfiguration处理,但更希望直接通过自定义对象设置连接字符串等参数,且文档未明确IConfiguration所需的配置键。

附代码示例说明需求:
// MyAppConfig.cs

class MyAppConfig {
    protected IConfiguration config { get; set; }
    public MyAppConfig(IConfiguration config)
    {
        this.config = config;
    }

    public string AppInsightsConnectionString
    {
        get
        {
            return config["appInsights-connectionString"];
        }
    }
}

// Program.cs

var builder = WebApplication.CreateBuilder(args);
builder.Host.ConfigureAppConfiguration((_, confBuilder) => {
    builder.AddAzureAppConfiguration(/*init Azure App Configuration*/);
    confBuilder.AddSingleton<MyAppConfig>();
});
builder.Services.AddApplicationInsightsTelemetry(); // 希望此处使用单例MyAppConfig中的AppInsightsConnectionString

请问如何在ASP.NET Core中使用自定义服务(简单类实例)作为Application Insights的配置源?

解决方案

可以通过两种方式实现用自定义MyAppConfig配置Application Insights:

方式一:提前构建实例直接传入

先完成配置体系的构建,手动实例化MyAppConfig后直接传入Application Insights配置:
修改Program.cs如下:

var builder = WebApplication.CreateBuilder(args);

// 配置Azure App Configuration
builder.Host.ConfigureAppConfiguration((_, confBuilder) => {
    confBuilder.AddAzureAppConfiguration(/* 你的Azure App配置初始化代码 */);
});

// 手动创建MyAppConfig实例(此时IConfiguration已就绪)
var myAppConfig = new MyAppConfig(builder.Configuration);

// 将实例注入服务容器
builder.Services.AddSingleton(myAppConfig);

// 使用MyAppConfig中的连接字符串配置Application Insights
builder.Services.AddApplicationInsightsTelemetry(options => {
    options.ConnectionString = myAppConfig.AppInsightsConnectionString;
});

var app = builder.Build();
// 后续中间件配置...
app.Run();

注意:原代码中confBuilder.AddSingleton<MyAppConfig>()是错误写法,服务注入必须放在builder.Services下,ConfigureAppConfiguration仅用于配置体系构建。

方式二:利用服务容器回调获取实例

使用AddApplicationInsightsTelemetry的重载方法,在服务容器构建完成后从容器中获取MyAppConfig:
修改Program.cs如下:

var builder = WebApplication.CreateBuilder(args);

builder.Host.ConfigureAppConfiguration((_, confBuilder) => {
    confBuilder.AddAzureAppConfiguration(/* 你的Azure App配置初始化代码 */);
});

// 先注入MyAppConfig到服务容器
builder.Services.AddSingleton<MyAppConfig>();

// 通过回调在服务容器就绪后获取配置
builder.Services.AddApplicationInsightsTelemetry((serviceProvider, options) => {
    var myAppConfig = serviceProvider.GetRequiredService<MyAppConfig>();
    options.ConnectionString = myAppConfig.AppInsightsConnectionString;
});

var app = builder.Build();
// 后续中间件配置...
app.Run();

该回调会在服务容器完全构建后执行,此时可以正常获取已注入的MyAppConfig实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:45:35