Autofac 作为 AWS Lambda Serverless 中的 IoC 容器 ASP.NET Core 3.1 Web API

Autofac as IoC container in AWS Lambda Serverless ASP.NET Core 3.1 Web API

我需要在 AWS Lambda 无服务器环境中使用 Autofac 作为 IoC 容器公开 Web API。

问题是似乎无法使用 Autofac,因为 AWS 在其预配置的入口点(LambdaEntryPoint class)中公开了 IWebHostBuilder:-

protected override void Init(IWebHostBuilder builder)
{
  builder.UseStartup<Startup>();
}

本地测试工作正常,因为 LocalEntryPoint class 看起来像这样:-

    public class LocalEntryPoint
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder
                        .UseStartup<Startup>();
                });
        }
    }

注意使用此处描述的方法使用 IHostBuilder https://autofaccn.readthedocs.io/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting

谁能提出解决这个问题的方法?

好消息!

我向 AWS 提出了这个问题,他们回应了他们的新版本 Amazon.Lambda.AspNetCoreServer (v5.1.0),现在包括使用 IHostBuilder.

的 Lambda 入口点

https://aws.amazon.com/blogs/developer/one-month-update-to-net-core-3-1-lambda/

我对其进行了测试,它使用入口点代码与 Autofac 配合使用效果很好,如下所示:-

        protected override void Init(IHostBuilder builder)
        {
            builder
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder
                        .UseStartup<Startup>();
                });
        }