ΠΡΠΈΠ²Π΅Ρ,
Π― ΡΠ΅ΡΡΠΈΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ api Ρ Amazon.Lambda.AspNetCoreServer, ΠΈ Ρ Π½Π°ΡΠΊΠ½ΡΠ»ΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅ Π·Π½Π°Ρ, ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄Π°Π»ΡΡΠ΅.
Autofac ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠΏΠΎΡΠΎΠ± Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ:
ΠΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ±: Ρ ΠΏΠΎΠΌΠΎΡΡΡ IHostBuilder .UseServiceProviderFactory(new AutofacServiceProviderFactory()
Π‘ΡΠ°ΡΡΠΉ ΡΠΏΠΎΡΠΎΠ±: Ρ IWebHostBuilder serviceCollection.AddAutofac()
Π’Π°ΠΊΠΆΠ΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, IWebHostBuilder Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ LambdaEntryPoint ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Init.
ΠΠ»Ρ IWebHostBuilder, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΡΡΠ°ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Autofac, Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π°:
Π’ΠΠΠ¬ΠΠ ΠΠΠ― Π₯ΠΠ‘Π’ΠΠΠΠ PRE-ASP.NET 3.0. ΠΠ’Π ΠΠ Π ΠΠΠΠ’ΠΠΠ’ ΠΠΠ― ASP.NET CORE 3.0+ ΠΠΠ ΠΠΠ©ΠΠΠ Π₯ΠΠ‘Π’ΠΠΠΠ.
Π Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ IHostBuilder Ρ LambdaEntryPoint.
ΠΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ ΠΈΠ»ΠΈ Π΅ΡΡΡ ΠΈΠ΄Π΅ΠΈ, ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ? ΠΠ°ΡΠ°Π½Π΅Π΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ!
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ (.NET Core 3.1) Ρ ΡΡΠΈΠΌ, ΠΈ Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Lambda Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠ° DI. ΠΠΎΠΉ ΠΊΠ»Π°ΡΡ LocalEntryPoint ΠΏΡΠΎΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ LambdaEntryPoint.
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>(); });
}
_normj ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π» ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΡΠΌ.
ΠΠ°, ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π²ΠΈΠΆΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ IWebHostBuilder ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Autofac Π² .NET Core 3.1. ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° IHostBuilder Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Ρ .NET Core 3.1. Π― ΠΏΡΡΠ°Π»ΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Ρ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ .NET Core 2.1, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ IWebHostBuilder.
Π― Π½Π΅ Ρ ΠΎΡΡ Π²Π½ΠΎΡΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΡ Π½Π΅Π΄Π΅Π»Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΠ΅ ΠΌΠ½Π΅ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, Π΅ΡΡΡ Π»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½Π²Π°Π·ΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΡΡΠΎΠ±Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²Π°Ρ Π²ΡΠ΅Ρ .
Π― ΡΠΎΠ·Π΄Π°Π» PR https://github.com/aws/aws-lambda-dotnet/pull/633, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° IHostBuilder, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ»Π° ΡΡΠ½ΠΊΡΠΈΡ CreateWebHostBuilder
.
ΠΠ΅ΡΡΠΈΡ 5.1.0 ΠΈΠ· Amazon.Lambda.AspNetCoreServer
Π²ΡΡΠ»Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ Ρ ΡΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ.
Π― ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠ³Π΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π», ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.
https://aws.amazon.com/blogs/developer/one-month-update-to-net-core-3-1-lambda/
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, Π±ΡΠ»ΠΎ Π»ΠΈ ΡΡΠΎ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ, Π½ΠΎ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» ΡΠ΅Π³ΡΠ΅ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ 5.0.0 ΠΈ 5.1.1.
Π― ΠΎΡΡΠ°Π²ΠΈΠ» ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π² Π΄ΡΡΠ³ΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅: https://github.com/aws/aws-lambda-dotnet/issues/669#issuecomment -629447122 Ρ ΠΏΠΎΠΌΠΎΡΡΡ Stacktrace. ΠΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° github. Π ΠΌΠΎΠ΅ΠΉ ΡΠΎΡΠΊΠ΅ Π²Ρ ΠΎΠ΄Π° Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π²ΡΠ·ΠΎΠ²ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
protected override void Init(IWebHostBuilder webHostBuilder)
{
webHostBuilder
.ConfigureAppConfiguration((context, configurationBuilder) =>
{
configurationBuilder.Sources.Clear();
configurationBuilder.AddEnvironmentVariables();
}
)
.ConfigureServices(
sc =>
{
sc.TryAddSingleton<ICustomServiceProviderFactory>(new CustomServiceProviderFactory());
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddLambdaLogger(new LambdaLoggerOptions
{
IncludeLogLevel = true,
Filter = (category, logLevel) => true
});
})
.UseStartup<Startup>();
}
ΠΡΠΈΠ²Π΅Ρ @Xocix!
Π‘ΠΎΠΎΠ±ΡΠΈΡΠ΅, ΡΠ΅ΡΠ°Π΅Ρ Π»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ,
ΠΡΠΈΡ
ΠΡΠΈΠ²Π΅Ρ, @ashishdhingra, ΠΈΠ·Π²ΠΈΠ½ΠΈ, ΡΡΠΎ Π½Π΅ ΠΎΡΠ²Π΅ΡΠΈΠ». ΠΠ»Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΡΠ΅ΡΠΈΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π²ΡΠ΅ΠΌ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Ρ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½!
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ°, ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π²ΠΈΠΆΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ IWebHostBuilder ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Autofac Π² .NET Core 3.1. ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° IHostBuilder Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Ρ .NET Core 3.1. Π― ΠΏΡΡΠ°Π»ΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Ρ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ .NET Core 2.1, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ IWebHostBuilder.
Π― Π½Π΅ Ρ ΠΎΡΡ Π²Π½ΠΎΡΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΡ Π½Π΅Π΄Π΅Π»Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΠ΅ ΠΌΠ½Π΅ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, Π΅ΡΡΡ Π»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½Π²Π°Π·ΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΡΡΠΎΠ±Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²Π°Ρ Π²ΡΠ΅Ρ .