CreateWebHostBuilder 的 C# Lambda 表达式

C# Lambda expression for CreateWebHostBuilder

我想使用 Read Me 的 "Reloading in AWS Lambda" 部分中记录的 WaitForSystemsManagerReloadToComplete() 扩展。

我相信我已经编写了正确的语法来调用它,但由于它不是一个容易测试的过程,所以我想确认语法。代码:

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

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        {
            return WebHost.CreateDefaultBuilder(args)
                      .ConfigureAppConfiguration(builder =>
                      {
                          builder
                            .AddSystemsManager("/AppName")
                            .Build()
                            .WaitForSystemsManagerReloadToComplete(TimeSpan.FromSeconds(5));
                      })
                      .UseStartup<Startup>();
        }
 }

我担心的是,尽管我在 Lambda 表达式中调用了 WaitForSystemsManagerReloadToComplete(),但我想知道它是否会按设计影响执行线程。

通过查看 Github 上的示例,我会说在表达式中调用它是错误的。您不必为了进行该调用而在表达式中构建配置。而是将该代码移动到 Startup 并在那里调用它。

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

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
        return WebHost.CreateDefaultBuilder(args)
                  .ConfigureAppConfiguration(builder => {
                      builder.AddSystemsManager("/AppName");
                  })
                  .UseStartup<Startup>();
    }
}

启动

public class Startup {
    public Startup(IConfiguration configuration) {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services) {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        //...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();

        Configuration.WaitForSystemsManagerReloadToComplete(TimeSpan.FromSeconds(5));
    }
}