为什么创建函数 CreateWebHostBuilder()?

ask*_*otl 2 c# visual-studio entity-framework-core asp.net-core asp.net-core-2.2

创建 ASP.NET Core 2.2 Web API 时,Visual Studio 2019 会创建以下代码:

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

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么要创建一个函数CreateWebHostBuilder?为什么它不只是创建如下代码?

namespace myapi
{
    public class Program
    {
        public static void Main(string[] args)
        {
            WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().Build().Run();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*kin 6

CreateWebHostBuilder方法是通过实体框架的核心工具使用,描述在这里

调用的代码CreateDefaultBuilder位于名为 的方法中CreateWebHostBuilder,该方法将其与Main调用Runbuilder 对象的代码分开。如果您使用Entity Framework Core 工具,则需要这种分离。这些工具希望找到一种CreateWebHostBuilder可以在设计时调用的方法,以在不运行应用程序的情况下配置主机。另一种方法是实现IDesignTimeDbContextFactory. 有关更多信息,请参阅设计时 DbContext 创建

如果您不使用 EF Core,则可以Main按照您的建议将其折叠到方法中。

  • 如果您针对在内存中启动应用程序的 API 运行集成测试,测试主机也会使用它。 (2认同)