ASP.NET Core 是一种开源的、跨平台的、高性能的 Web 应用程序框架。其中 Host.CreateDefaultBuilder 是一个 ASP.NET Core 5.0 的新特性,它提供了一个有用的方法来快速地搭建一个 Web 应用程序的主机。本攻略将详细讲解 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 执行过程,并提供两个实例说明。
Host.CreateDefaultBuilder 执行过程
Host.CreateDefaultBuilder 是通过启动类(Program.cs)的默认构造器 Startup 的方法之前来执行的,并将其返回值传递给 Startup。其执行过程包括以下三个步骤:
1. 设置主机配置
第一步是设置主机配置。这一步使用了一个工厂方法 CreateDefaultBuilder
,它返回了一个 IHostBuilder
接口的实例,它包含了启动一个应用程序所需要的所有配置信息。代码示范如下:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
在这里我们使用了 ConfigureWebHostDefaults
方法,用于配置主机都需要的一系列操作。
2. 加载配置文件
第二步是加载配置文件。如果当你运行 ASP.NET Core 应用程序时没有传入命令参数,那么应用程序将会默认加载 appsettings.json
文件,这个文件必须放置在项目的根目录下,否则你需要指定其它路径的配置文件。下面是加载配置文件的代码示例:
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
config.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
if (args != null)
{
config.AddCommandLine(args);
}
});
上面代码使用了方法ConfigureAppConfiguration
,它可以加载不同环境下的配置文件,还可以通过命令行参数来配置(例如:dotnet run --port 5000),以此来满足不同环境下的需求。
3. 配置日志消息
第三步是配置日志消息。ASP.NET Core 在启动时默认加载了一个日志消息模块,用于输出日志消息。在这个步骤中,我们可以自定义日志消息格式、日志存储位置等参数。代码示例如下:
.ConfigureLogging((hostingContext, logging) =>
{
// 配置日志消息记录位置的路径
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
// 配置日志消息格式, 以Console输出日志消息
logging.AddConsole();
// 配置日志消息格式, 以Debug输出日志消息
logging.AddDebug();
});
示例说明
我们提供以下两个 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 的示例。
示例1: 使用Host.CreateDefaultBuilder托管Console输出
在这个示例中,我们来介绍如何使用Host.CreateDefaultBuilder托管控制台输出。首先,你需要使用 .NET CLI 创建一个新的控制台项目:
dotnet new console --name ConsoleApp
然后,你需要添加以下代码到 Program.cs 文件中,来配置控制台输出:
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
.ConfigureServices(services =>
{
services.AddTransient<MyService>();
})
.Build();
var myService = ActivatorUtilities.CreateInstance<MyService>(host.Services);
myService.Run();
host.Run();
}
}
class MyService
{
private readonly ILogger<MyService> _logger;
public MyService(ILogger<MyService> logger)
{
_logger = logger;
}
public void Run()
{
_logger.LogInformation("Hello, world from MyService!");
}
}
}
在上述例子中,我们通过调用静态的方法 Host.CreateDefaultBuilder
来创建了一个默认的主机,并且使用了 ConfigureLogging
方法来配置日志记录位置为控制台输出。在 ConfigureServices
方法中添加了 MyService
类型,并在此类型中通过调用 _logger.LogInformation
方法输出了一条信息。最后,在调用 host.Run()
方法时,我们成功启动并且运行了我们的应用程序。
示例2: 使用Host.CreateDefaultBuilder托管Web应用
在这个示例中,我们来介绍如何使用Host.CreateDefaultBuilder托管 Web 应用。首先,你需要使用 .NET CLI 创建一个新的 Web 项目,我们以 Razor Pages 为例:
dotnet new webapp --name WebApp
然后你需要添加以下配置代码到 Program.cs 文件中,来创建一个默认的主机:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace WebApp
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
在这个示例中,我们使用了 ConfigureWebHostDefaults
方法来配置 Web 主机,同时使用了 UseStartup
方法来配置自己的 StartUp 类。
最后,我们需要编写自己的 Startup 类来处理 HTTP 请求和响应。 在 Startup 类中,我们需要添加以下中间件来处理 HTTP 请求和响应:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
namespace WebApp
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
endpoints.MapRazorPages();
});
}
}
}
在上述代码中,我们使用了 AddRazorPages
方法将 Razor Pages 中间件添加到服务容器中,并在方法 Configure
中调用了 UseRouting
和 UseEndpoints
方法来处理 HTTP 请求并返回响应。
结论
本攻略介绍了 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 执行过程,并提供了两个示例来说明如何为控制台应用程序和 Web 应用程序创建默认主机。对于了解和学习 ASP.NET Core 5.0 的程序员来说,Host.CreateDefaultBuilder 是一个非常重要且有用的方法,特别是在应用程序的启动阶段。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程解析 - Python技术站