WebApplication 是用于配置HTTP管道和路由的web应用程序,接来下我将一一拆解它的组成。
///
/// The web application used to configure the HTTP pipeline, and routes.
///
[DebuggerDisplay("{DebuggerToString(),nq}")]
[DebuggerTypeProxy(typeof (WebApplication.WebApplicationDebugView))]
public sealed class WebApplication : IHost,IDisposable,IApplicationBuilder,IEndpointRouteBuilder,IAsyncDisposable
IHost
首先Web应用是一个程序,而 IHost 就是程序的抽象
public interface IHost : IDisposable
{
IServiceProvider Services { get; }
Task StartAsync(CancellationToken cancellationToken = default (CancellationToken));
Task StopAsync(CancellationToken cancellationToken = default (CancellationToken));
}
一个程序具备启动、停止生命周期,这很好理解。我要说的是 IServiceProvider ,他非常关键,后面会在依赖注入章节来详细解释。目前你只需要知道他是一个服务供应商就可以了,就可以通过他获取想要的服务,但前提是你在IOC容器中注册过。
Host StartAsync 代码流如下:
await host._hostLifetime.WaitForStartAsync(token1).ConfigureAwait(false); // 注册start程序
host.Services.GetService
IHostedLifecycleService.StartingAsync
IHostedService.StartAsync
IHostedLifecycleService.StartedAsync
host._applicationLifetime.NotifyStarted();
StopAsync 类似,代码流如下:
IHostedLifecycleService.StoppingAsync
IHostedService.StopAsync
IHostedLifecycleService.StoppedAsync
this._logger.StoppedWithException((Exception) ex);
值得注意的是 IStartupValidator、IHostedService、IHostedLifecycleService 分别为我们提供不同的钩子,只需要向容器注册即可加入我们自定义的业务逻辑。
IApplicationBuilder
WebApplication 实现 IApplicationBuilder 具有pipeline机制。
IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware);
RequestDelegate Build();
这里要解释一下pipeline,管道是.NET中非常普及的一个概念,内核是切面编程,同样的在后续我们会有专门的章节来例举它。现在你只需要知道,他是一个洋葱模型。
同时,IApplicationBuilder 从命名上就表达了这是一个构建者模
标签:总结,10,26,CancellationToken,IApplicationBuilder,host,WebApplication,IHost,IHosted From: https://www.cnblogs.com/lmyy/p/17810204.html