У меня есть приложение, которое использует конфигурацию приложений Azure для предоставления значений конфигурации. Я настроил его так, чтобы он читал их как часть процесса запуска приложения ASP.NET Core, и он работает нормально. В рамках установки он также внедряет одноэлементный объект конфигурации в поставщика услуг следующим образом:
serviceCollection.AddSingleton<MyAppConfig>();
Теперь я хочу использовать значение из этого объекта конфигурации для настройки Application Insights, но, похоже, у меня нет способа получить услугу MyAppConfig от поставщика услуг во время установки. Я нашел эту ссылку, которая, кажется, указывает, что я могу использовать экземпляр IConfiguration для обработки этого, но я бы предпочел использовать свой фактический объект для прямой установки строки подключения и других значений. Кроме того, кажется, что это не объясняет, какие именно ключи мне нужно установить в объекте IConfiguration, чтобы предоставить мои параметры.
Как использовать пользовательскую службу (экземпляр простого класса) в качестве источника конфигураций для Application Insights в ядре ASP.NET?
Обновлено: для ясности я добавил простой пример кода того, чего я хочу достичь:
// 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(); // This should use MyAppConfig.AppInsightsConnectionString from singleton instance
var newSettings = builder.Configuration.Get<NewAppSettings>(); builder.services.AddSingleton<NewAppSettings>(newSettings)Это в значительной степени то, что я уже делаю. Проблема в том, что builder.Services.AddApplicationInsightsTelemetry() не позволяет мне читать настройки из моего собственного класса.
Не могли бы вы поделиться своим исходным кодом?
Я добавил конкретный пример того, что я пытаюсь сделать.





После еще нескольких исследований мне удалось найти обходной путь. Он не использует класс MyAppConfig напрямую, но позволяет мне получить строку подключения Application Insights из Azure App Configuration.
Я бы предпочел более чистый подход, если он существует. В идеале я могу установить строку подключения непосредственно на объекте TelemetryConfiguration, чтобы она была максимально точной, поскольку я не поклонник «магического» значения конфигурации "ApplicationInsights:ConnectionString". Но, по крайней мере, это работает на данный момент.
// 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*/);
var configuration = builder.Build();
var staticConfig = new Dictionary<string, string>
{
// Settting this explicitly allows the default Application Insights client to read a proper connection string from where it expects to find it
// Ref: https://learn.microsoft.com/en-us/azure/azure-monitor/app/asp-net-core?tabs=netcore6#enable-application-insights-server-side-telemetry-no-visual-studio
{ "ApplicationInsights:ConnectionString", configuration["appInsights-connectionString"] }
};
builder.AddInMemoryCollection(staticConfig);
confBuilder.AddSingleton<MyAppConfig>();
});
builder.Services.AddApplicationInsightsTelemetry(); // This should use MyAppConfig.AppInsightsConnectionString from singleton instance
Создайте новый класс с конфигурациями и назовите его
NewAppSettings.