我可以在 C# 中创建非静态 Azure 函数 class 吗?会有什么后果?
Can I create non static Azure function class in C#, what are the consequences?
Azure 函数中的构造函数注入和自定义遥测事件的收集需要此非静态 class。
如果我们在 visual studio 中创建一个 azure 函数应用程序,它会使用 static 关键字创建默认值,如下所示:
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
telemetryClient.TrackEvent(new Exception("Function started"));
}
但是要使用构造函数依赖注入(对于 Temeltry 客户端,我正在使用它),我们需要删除 static 关键字。
public Function1(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}
以前,Azure Functions 仅支持静态 classes/methods。此限制使通过构造函数进行 DI 变得不可能。但是后来实现了对非静态 classes/methods 的支持(参见 Support Instance Functions)。
因此,如果您需要通过构造函数使用DI,只需将其更改为非静态即可。没有任何后果。
虽然这并不完全正确 - 我只是 运行 在使用非静态定时器触发函数时遇到了一些麻烦。在我的例子中,我需要 entity framework 方面的依赖注入,但是这个非静态实例现在给我带来了麻烦,以便在本地进行开发时调用管理端点来触发该功能。
在此处查看有关如何正常调用静态计时器触发函数的更多信息:
Azure 函数中的构造函数注入和自定义遥测事件的收集需要此非静态 class。
如果我们在 visual studio 中创建一个 azure 函数应用程序,它会使用 static 关键字创建默认值,如下所示:
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
telemetryClient.TrackEvent(new Exception("Function started"));
}
但是要使用构造函数依赖注入(对于 Temeltry 客户端,我正在使用它),我们需要删除 static 关键字。
public Function1(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}
以前,Azure Functions 仅支持静态 classes/methods。此限制使通过构造函数进行 DI 变得不可能。但是后来实现了对非静态 classes/methods 的支持(参见 Support Instance Functions)。
因此,如果您需要通过构造函数使用DI,只需将其更改为非静态即可。没有任何后果。
虽然这并不完全正确 - 我只是 运行 在使用非静态定时器触发函数时遇到了一些麻烦。在我的例子中,我需要 entity framework 方面的依赖注入,但是这个非静态实例现在给我带来了麻烦,以便在本地进行开发时调用管理端点来触发该功能。
在此处查看有关如何正常调用静态计时器触发函数的更多信息: