启动执行顺序
1、-------开始--------
2、-------ConfigureWebHostDefaults------ -
3、-------ConfigureHostConfiguration------ -
4、-------ConfigureAppConfiguration------ -
5、-------Startup-- > 构造函数--------
6、-------Startup-- > --ConfigureServices--------
7、-------ConfigureServices------ -
8、-------ConfigureLogging------ -
9、-------Startup-- > ---Configure--------
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("\r\n");
Console.WriteLine("1、-------开始--------");
var hostBuilder = Host.CreateDefaultBuilder(args);
hostBuilder.ConfigureWebHostDefaults(webBuilder =>
{
//一般是配置组件和容器的组件
Console.WriteLine("2、-------ConfigureWebHostDefaults-------");
webBuilder.UseStartup<Startup>();
});
hostBuilder.ConfigureHostConfiguration(webBuilder =>
{
//用来配置HostBuilder的builder过程所用到的配置的。
Console.WriteLine("3、-------ConfigureHostConfiguration-------");
});
hostBuilder.ConfigureAppConfiguration((hostContext, configurationBuilder) =>
{
//嵌入自己的配置文件供应用程序来读取。
Console.WriteLine("4、-------ConfigureAppConfiguration-------");
});
hostBuilder.ConfigureServices((hostContext, services) =>
{ //往容器里面注入应用组件
Console.WriteLine("7、-------ConfigureServices-------");
});
hostBuilder.ConfigureLogging(logging =>
{ //注入日志组件
Console.WriteLine("8、-------ConfigureLogging-------");
});
Console.WriteLine("------结束--------");
hostBuilder.Build().Run();
Console.WriteLine("------不执行--------");
}
}
public class Startup
{
public Startup()
{
Console.WriteLine("5、-------Startup-->构造函数--------");
}
public void ConfigureServices(IServiceCollection services)
{
Console.WriteLine("6、-------Startup-->--ConfigureServices--------");
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
Console.WriteLine("9、-------Startup-->---Configure--------\r\n\r\n");
}
}
- ConfigureWebHostDefaults:注册应用程序必要组件 比如 配置 ,容器的组件
hostBuilder.ConfigureWebHostDefaults(webBuilder => { //一般是配置组件和容器的组件 webBuilder.UseStartup<Startup>(); webBuilder.UseUrls("http://localhost:5000"); });
- ConfigureHostConfiguration:用来配置应用程序启动时必要的配置 比如 应用程序启动时需要监听的窗口,监听的URL地址, 在这个过程我们可以嵌入我们自己配置的内容
- ConfigureAppConfiguration:让我们来嵌入我们自己的配置文件,供应用程序读取,这些配置将来就会在后续的应用程序执行过程中间每个组件读取
//加载 指定的 json配置 configurationBuilder.AddJsonFile("Configuration/Database.json", optional: true, reloadOnChange: true);
- ConfigureServices:往容器里面注入应用组件
hostBuilder.ConfigureServices((hostContext, services) => { //往容器里面注入应用组件 // 注册 HttpContextAccessor 服务 services.AddHttpContextAccessor(); });
- ConfigureLogging:注入日志组件
hostBuilder.ConfigureLogging(logging => { //注入日志组件 Console.WriteLine("8、-------ConfigureLogging-------"); logging.ClearProviders();//移除已经注册的其他日志处理程序 logging.AddConsole(); //添加一个 Console 日志记录提供程序,以便在控制台中查看应用程序的日志记录信息。 logging.AddDebug(); logging.AddJsonConsole();// 方法添加一个 JSON 格式的日志记录提供程序,以便在 ELK 等日志分析工具中分析日志记录。 logging.SetMinimumLevel(LogLevel.Trace); //设置最小的日志级别 });
- Startup.ConfigureServices :注入一些服务组件
services.AddControllersWithViews(); services.AddSwaggerGen(); services.AddHttpContextAccessor();//注册 HttpContextAccessor 服务
- Startup.Configure:注入我们的中间件到处理过程中间去 ,处理HttpContext整个的请求过程
app.UseSwagger(); app.UseSwaggerUI(); app.UseStaticFiles(); app.UseAuthorization();