gpt4 book ai didi

c# - 如何在 c# Azure Function 项目中的多个类中重用 ILogger?

转载 作者:行者123 更新时间:2023-12-03 02:50:12 25 4
gpt4 key购买 nike

使用 Visual Studio 2017 构建 C# Azure Function v2 项目。我只定义了一个函数,但在 HTTP 触发执行期间会实例化多个类。大部分是我自己的代码,一些是 JSON 反序列化(因此无法控制如何调用构造函数)。

函数方法签名接收我用于记录的 ILogger 实例。让我的所有类实例使用同一个 ILogger 实例,而不必将 ILogger 传递给每个类实例化的最佳方法是什么?

我知道使用静态变量是不可能的,因为它们在不同的函数调用之间共享,而每个调用都会接收另一个 ILogger 实例。

此外,依赖注入(inject)似乎在这里没有到位,因为这些类仅在内部使用,除了 JSON 反序列化类之外。

以下是我总结的代码。我可以将 ILogger 传递给 MyClass 构造函数,但 myClass.PerformTheTask() 执行使用和实例化多个类的复杂代码,所有这些都需要记录内容。

这里最好的方法是什么?

[FunctionName("FunctionName")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "someroute{route}")] HttpRequest req,
ILogger log,
ExecutionContext context)
{
var myClass = new myClass(); //how to make myClass and its children access ILogger?
myClass.PerformTheTask();
}

最佳答案

@EricG,

正如 Fredrik 所说,您可以在现在支持的 Azure Function V2 中使用依赖注入(inject)。Azure Functions 构建在 ASP.NET Core 依赖注入(inject)功能之上。

您可以在此处和 git repo 中找到 Azure 示例。供引用。

它非常容易使用,也更干净。它使用构造函数注入(inject)来注入(inject)依赖项。

public class SampleFunction
{
private readonly MyServiceA _serviceA;
private readonly MyServiceB _serviceB;
private readonly IGlobalIdProvider _globalIdProvider;

public SampleFunction(MyServiceA serviceA, MyServiceB serviceB, IGlobalIdProvider globalIdProvider)
{
_serviceA = serviceA ?? throw new ArgumentNullException(nameof(serviceA));
_serviceB = serviceB ?? throw new ArgumentNullException(nameof(serviceB));
_globalIdProvider = globalIdProvider ?? throw new ArgumentNullException(nameof(globalIdProvider));
}

[FunctionName("SampleFunction")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation($"Service A ID: {_serviceA.IdProvider.Id}. Service B ID: {_serviceB.IdProvider.Id}");

return new OkObjectResult(new
{
ProvidersMatch = ReferenceEquals(_serviceA.IdProvider, _serviceB.IdProvider),
GlobalId = _globalIdProvider.Id,
ServiceAId = _serviceA.IdProvider.Id,
ServiceBId = _serviceB.IdProvider.Id
});
}
}

类似地,您可以使用 ILogger 来完成此操作并在类中使用它。希望对您有所帮助。

关于c# - 如何在 c# Azure Function 项目中的多个类中重用 ILogger?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56563047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com