我在.net核心中有一个Lambda项目,并希望启用依赖注入。我创建了一个Startup类,在其中添加了ConfigureService和ConfigureContainer
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
void ConfigureContainer()
{
services.AddTransient<IProfileEventHandler, ProfileEventHandler>();
services.AddTransient<IRepository, ESRepository>();
services.AddTransient<IDataKeyDecryption, KmsDataKeyDecryption>();
services.AddTransient<IDecryptionProvider, DecryptionProvider>();
}
ConfigureContainer();
}
}
通常,一个典型的.net核心项目有一个Program类,我们将在CreateWebHost方法中调用启动类,当我们运行WebHost时,它将仅解决依赖关系。但是我如何在AWS Lambda项目中做同样的事情。
答案 0 :(得分:2)
您可以查看无服务器.NET示例,然后从那里得到灵感。它具有非常简单的实现方式:
创建从LambdaEntryPoint
继承的APIGatewayProxyFunction
类。
将serverless.template中的资源点添加到该资源。
LambdaEntryPoint.cs:
public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
{
protected override void Init(IWebHostBuilder builder)
{
builder.UseStartup<Startup>();
}
}
serverless.template:
"Resources": {
"AspNetCoreFunction": {
"Type": "AWS::Serverless::Function",
"Properties": {
"Handler": "AWSServerless::AWSServerless.LambdaEntryPoint::FunctionHandlerAsync",
"Runtime": "dotnetcore3.1",
"Events": {
"ProxyResource": {
"Type": "Api",
"Properties": {
"Path": "/{proxy+}",
"Method": "ANY"
}
},
"RootResource": {
"Type": "Api",
"Properties": {
"Path": "/",
"Method": "ANY"
}
}
}
}
},
关于.NET Lambda的详细解释-https://aws.amazon.com/blogs/developer/one-month-update-to-net-core-3-1-lambda/
答案 1 :(得分:0)
依赖注入与Lambda无关。如果您的代码中有关于如何处理的所有内容。
在这里看看示例实现。
https://docs.aws.amazon.com/lambda/latest/dg/dotnet-programming-model-handler-types.html
在静态方法的入口处初始化DI代码。
希望有帮助。
答案 2 :(得分:0)
您实际上可以在Lambdas中使用Asp.NET Core,这当然可以简化Web开发。 如果下载了dotnet项目模板,则可以从已经具有无服务器模板以及lambda入口点的模板创建项目,所有这些模板均已配置为lambda!
使用此方法将为您提供Asp.Net Core开箱即用提供的DI和IoC。
如果您使用的是VS,则可以下载适用于Visual Studio的AWS工具包: https://aws.amazon.com/visualstudio/
或者,您可以通过dotnet cli下载要使用的模板 https://aws.amazon.com/blogs/developer/creating-net-core-aws-lambda-projects-without-visual-studio/