Autofa c as Io C контейнер в AWS Lambda Serverless ASP. NET Core 3.1 Web API - PullRequest
1 голос
/ 15 апреля 2020

У меня есть требование выставить веб-API с использованием Autofa c в качестве контейнера Io C в AWS Lambda-среде.

Проблема в том, что, похоже, нет способа используйте Autofa c как AWS, чтобы выставить IWebHostBuilder в их предварительно настроенной точке входа (класс LambdaEntryPoint): -

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

Локальное тестирование работает нормально, так как класс LocalEntryPoint выглядит следующим образом: -

    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-generi c -hosting

Can Кто-нибудь предлагает способ обойти это?

1 Ответ

0 голосов
/ 29 апреля 2020

Хорошие новости!

Я поднял это с помощью AWS, и они ответили своей новой версией Amazon.Lambda.AspNetCoreServer (v5.1.0), которая теперь включает точку входа Lambda, используя IHostBuilder.

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

Я проверил его, и он отлично работает с Autofa c, используя код точки входа следующим образом: -

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