gpt4 book ai didi

c# - 使用 dotnet core 2.1 的 AWS Lambda 函数中的依赖注入(inject)

转载 作者:行者123 更新时间:2023-11-30 16:39:44 25 4
gpt4 key购买 nike

我是 Aws Lambda 的新手,正在尝试弄清楚如何使用 .net core 2.1 将依赖注入(inject)用于 Aws Lambda。

我正在尝试注入(inject) IHttpClientFactory,但我不确定我是否正确地注入(inject)了它。

我在 lambda 函数类的构造函数中调用以下方法:

  private static IServiceProvider ConfigureServices()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddHttpClient("client", client =>
{
client.BaseAddress = new Uri("someurl");
});

return serviceCollection.BuildServiceProvider();
}

这是正确的吗?

此外,在它返回 IServiceProvider 之后,如何在需要调用 IHttpClientFactory 的任何类中使用它?

(我已经看过一些相关的文章,但我仍然不清楚在构造函数中调用时使用 ConfigureServices() 方法的输出?)

谢谢。

DI 的使用示例:

public class Function
{
private readonly ITestClass _test;
public Function()
{
ConfigureServices();
}

public async Task Handler(ILambdaContext context)
{
_test.Run(); //Run method from TestClass that implements ITestClass and calls IHttpClientFactory to make call to an API

//return something
}

private static void ConfigureServices()
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddHttpClient("client", client =>
{
client.BaseAddress = new Uri("someurl");
});
serviceCollection.AddTransient<ITestClass, TestClass>();
serviceCollection.BuildServiceProvider(); //is it needed??
}
}

最佳答案

将服务提供者指定为 DI 容器并在您的函数中使用它

Function.cs

public class Function {

public static Func<IServiceProvider> ConfigureServices = () => {
var serviceCollection = new ServiceCollection();
serviceCollection.AddHttpClient("client", client =>
{
client.BaseAddress = new Uri("someurl");
});
serviceCollection.AddTransient<ITestClass, TestClass>();
return serviceCollection.BuildServiceProvider();
};

static IServiceProvider services;
static Function() {
services = ConfigureServices();
}


public async Task Handler(ILambdaContext context) {
ITestClass test = services.GetService<ITestClass>();
await test.RunAsync();

//...
}
}

使用静态构造函数进行一次性调用以配置您的服务并构建服务容器。

关于c# - 使用 dotnet core 2.1 的 AWS Lambda 函数中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52580618/

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