独自快乐|Asp.net Core启动流程讲解(一)


独自快乐|Asp.net Core启动流程讲解(一)asp.net core默认项目包括项目根目录级的Startup.cs、Program.cs、appsettings.json(appsettings.Development.json) launchSettings.jsonControllers文件夹下面的ValuesController.cs以及启动配置文件launchSettings.json
Program.csProgram.cs 配置程序启动项以及各类初始化 ,Asp.net Core 3.0以及以后版本的替换依赖注入就得在Program内配置
.net core 3.0之前的Program.cs.net core 3.0之后的Program.cs
.net core 3.0之前的Program.cs.net core 2.2以及之前的版本 , 控制容器的 , 主要是WebHost , 默认实现也以此为主
在WebHost.CreateDefaultBuilder(args)之后 , 就可以完成各种对于WebHost的配置 , 常见的默认函数 UseStartu、UseUrl以及UseConfiguration等 。 执行完CreateWebHostBuilder函数后 , 返回IWebHostBuilder , 然后Build->Run项目启动
.net core 3.0之后的Program.cs.net core 3.0以及以后 , 控制容器的 , 从WebHost变成Host , 默认实现也以此为主
在WebHost.CreateDefaultBuilder(args)之后 , 执行ConfigureWebHostDefaults函数 , 在函数内就可以完成各种对于WebHost的配置 , 常见的默认函数 UseStartu、UseUrl以及UseConfiguration等 。 执行完CreateWebHostBuilder函数后 , 返回IWebHostBuilder , 然后Build->Run项目启动
Startup.csStartup是Asp.net core启动程序Startup启动过程中默认实现并启动了IStartup接口和IStartupFilter接口IStartup是Starup的隐式实现 , IStartupFilter是启动过程中的过滤器 , 可以完成一些加载在asp.net core管道/中间件之前的额外流程
IStartup/StartupStarup是根据IStartup实现的
public interface IStartup{IServiceProvider ConfigureServices(IServiceCollection services);void Configure(IApplicationBuilder app);}ConfigureServices方法只能有一个参数 , 且参数类型为IServiceCollection , 返回值为IServiceProviderStartup类的ConfigureServices方法 , 在asp.net core 3.0以及以上 , 返回值只能为voidConfigure方法可以依赖注入多个Singleton/Transient生命周期的服务
IStartupFilterIStartupFilter是启动前的过滤器
public interface IStartupFilter{Action Configure(Action next);}在启动过程中 , 通过Ioc容器获取一组IStartupFilter实力 , 然后列表反转执行
private RequestDelegate BuildApplication(){..IApplicationBuilder builder = builderFactory.CreateBuilder(Server.Features);builder.ApplicationServices = _applicationServices;var startupFilters = _applicationServices.GetService>();Action configure = _startup.Configure;foreach (var filter in startupFilters.Reverse()){configure = filter.Configure(configure);}configure(builder);return builder.Build();}后记开了一个系列 , 杂谈一下asp.net core的内容 , 做一下系统性的总结分享 。 网上不缺乏分享asp.net core细节的 , 无论是源码级 , 还是应用上的sample , 但是缺乏一个系统性的系列 。 不自量力 , 想分享一点 。
【独自快乐|Asp.net Core启动流程讲解(一)】原文地址:


    推荐阅读