启动执行顺序
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();