.Net Core-启用DI的AWS Lambda项目

时间:2019-05-23 21:39:13

标签: amazon-web-services asp.net-core dependency-injection .net-core aws-lambda

我在.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项目中做同样的事情。

3 个答案:

答案 0 :(得分:2)

您可以查看无服务器.NET示例,然后从那里得到灵感。它具有非常简单的实现方式:

  1. 创建从LambdaEntryPoint继承的APIGatewayProxyFunction类。

  2. 将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/