首页 > 解决方案 > Azure Functions V3 进程外 - App Insights DI

问题描述

我们正在用 dotnet 5 v3 进程外函数替换一些现有的 v1 函数,但存在 DI 问题。

考虑以下现有服务(存储库模式)也被 ASP Dotnet Core Web Api 使用并且我们需要在 V3 函数中使用:

public class MyRepository : IMyRepository
private TelemetryClient _telemetry;
private readonly IConfiguration _configuration;
public MyRepository(DbContext context, TelemetryClient telemetry, IConfiguration configuration)
{
  _telemetry = telemetry;
  _configuration = configuration;
}

V3函数中的program.cs如下:

var host = new HostBuilder()
  .ConfigureFunctionsWorkerDefaults()
  .ConfigureServices(services =>
  {
     services.AddLogging();
     services.AddScoped<IMyRepository, MyRepository>();
  })
  .Build();
host.Run();

函数构造函数:

private readonly IConfiguration _configuration;
private readonly IMyRepository _myRepo;
private readonly TelemetryClient _telemetryClient;

public V3Func (IConfiguration configuration, IMyRepository myRepo, TelemetryConfiguration telemetryConfiguration)
{
   this._configuration = configuration;
   this._myRepo = myRepo;
   this._telemetryClient = new TelemetryClient(telemetryConfiguration);
}

目前尚不清楚,我找不到任何详细说明如何将 TelemetryClient 传递给注册服务的文档...这是运行该函数时的错误。

异常:System.InvalidOperationException:尝试激活“*.MyRepository”时无法解析类型“Microsoft.ApplicationInsights.TelemetryClient”的服务。

有人设法做到这一点吗?

标签: azure-functions

解决方案


请勿随意更改此设置,因为可能需要更改其他应用程序设置和更改您的功能代码。请参阅如何定位 Azure Functions 运行时版本

将 Azure 功能从 V1 迁移到最新版本,请在此处查看

您需要进行的更改与语言运行时的更改有关,例如 .NET Framework 4.8 和 .NET Core 之间的 C# API 更改。您还需要确保您的代码和库与您选择的语言运行时兼容。

最好的迁移结果,你应该function app在新版本中创建一个新的,并将你现有的版本1.x功能代码移植到新的应用程序中。

按照此博客更新 Azure 功能。

请查看 github问题和 SO 线程以获取更多信息。


推荐阅读