简介:
开发使用有三年经验了,想趁这个机会把net core的知识点梳理一下,也更好的研究一下.NET 5给我们带来的变化。
一个主机是封装了应用程序的资源,比如一个对象:
将应用程序的所有相互依赖的资源包含在一个对象中的主要原因是生命周期管理:控制应用程序启动和正常关闭。
主机通常由Program类中的代码配置、构建和运行。该Main方法:
1. Host.CreateDefaultBuilder(args) 主要做了以下几件事:
DOTNET_
.为前缀的环境变量。Development
环境中运行时的用户机密。2. 对于http 工作负载,使用ConfigureWebHostDefaults 去实例化一个IWebHostBuilder并且向webbuilder增加功能配置。
public static IHostBuilder ConfigureWebHostDefaults(this IHostBuilder builder,
Action
{
if (configure is null)
{
throw new ArgumentNullException(nameof(configure));
}
return builder.ConfigureWebHost(webHostBuilder =>
{
WebHost.ConfigureWebDefaults(webHostBuilder);
configure(webHostBuilder);
});
}
可以看到,ConfigureWebHostDefaults 是一个扩展方法,在内部调用 ConfigureWebHost 这个扩展方法,
ConfigureWebHost 这个扩展方法又做了哪些事情? 代码链接:https://github.com/dotnet/aspnetcore/blob/main/src/Hosting/Hosting/src/GenericHostWebHostBuilderExtensions.cs
public static class GenericHostWebHostBuilderExtensions
{
///
public static IHostBuilder ConfigureWebHost(this IHostBuilder builder, Action
{
if (configure is null)
{
throw new ArgumentNullException(nameof(configure));
}
return builder.ConfigureWebHost(configure, \_ => { });
}
/// <summary>
/// Adds and configures an ASP.NET Core web application.
/// </summary>
public static IHostBuilder ConfigureWebHost(this IHostBuilder builder, Action<IWebHostBuilder> configure, Action<WebHostBuilderOptions> configureWebHostBuilder)
{
if (configure is null)
{
throw new ArgumentNullException(nameof(configure));
}
if (configureWebHostBuilder is null)
{
throw new ArgumentNullException(nameof(configureWebHostBuilder));
}
var webHostBuilderOptions = new WebHostBuilderOptions();
configureWebHostBuilder(webHostBuilderOptions);
var webhostBuilder = new GenericWebHostBuilder(builder, webHostBuilderOptions);
configure(webhostBuilder);
builder.ConfigureServices((context, services) => services.AddHostedService<GenericWebHostService>());
return builder;
}
}
通过实例化一个 GenericWebHostBuilder 实例,扩展HostBuilder ASP.NET Core的运行时配置。
ConfigureWebHost 中的confiure 其实执行的是:
WebHost.ConfigureWebDefaults(webHostBuilder);
configure(webHostBuilder); (2)
(2) 执行的是我们在program 代码里进行的设置。例如 webBuilder.UseStartup
有读者比较感兴趣 GenericWebHostBuilder 这个类具体都做了什么,因为内容较多,不放在这里展示,实例化后的 _WebHostBuilder 内部拥有 HostBuilder,并且为其扩展了各种web 运行时的配置;
_
最后,回到 WebHost.ConfigureWebDefaults(webHostBuilder) ,它为注入的 webHostBuilder启用各类配置:
ASPNETCORE_
。ASPNETCORE_FORWARDEDHEADERS_ENABLED``true
3. 主机的build
通过 CreateHostBuilder(args).Build() 去构建主机。
这其中主要是:
总而言之:(如果你忽略上面的一整段,此处要看)
(1) 创建了HostBuilder -> (2) 为hostbuilder添加 aspnet core运行时的配置 -> (3) 启用各类web 运行时需要的配置 -> (4) 根据加载好的各种配置构建主机运行时需要提供的服务(configuration, DI Container, 应用程序配置等)
会持续整理发布关于后端和NET Core, .NET 的相关学习和认知,欢迎大家一起讨论学习。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章