王剑编程网

分享专业编程知识与实战技巧

Asp.net Core启动流程讲解(一)(asp.net core 配置)


asp.net core默认项目包括
项目根目录级的Startup.cs、Program.cs、appsettings.json(
appsettings.Development.json) launchSettings.json

Controllers文件夹下面的ValuesController.cs
以及启动配置文件launchSettings.json

Program.cs

Program.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.cs

Startup是Asp.net core启动程序
Startup启动过程中默认实现并启动了IStartup接口和IStartupFilter接口
IStartup是Starup的隐式实现,IStartupFilter是启动过程中的过滤器,可以完成一些加载在asp.net core管道/中间件之前的额外流程

IStartup/Startup

Starup是根据IStartup实现的

       public interface IStartup
       {
              IServiceProvider ConfigureServices(IServiceCollection services);

              void Configure(IApplicationBuilder app);

       }

ConfigureServices方法只能有一个参数,且参数类型为IServiceCollection,返回值为IServiceProvider
Startup类的ConfigureServices方法,在asp.net core 3.0以及以上,返回值只能为void
Configure方法可以依赖注入多个Singleton/Transient生命周期的服务

IStartupFilter

IStartupFilter是启动前的过滤器

       public interface IStartupFilter
       {
              Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> 
next);
       }

在启动过程中,通过Ioc容器获取一组IStartupFilter实力,然后列表反转执行

private RequestDelegate BuildApplication()
{
    ..
    IApplicationBuilder builder = builderFactory.CreateBuilder(Server.Features);
    builder.ApplicationServices = _applicationServices;

    var startupFilters = _applicationServices.GetService<IEnumerable<IStartupFilter>>();
    Action<IApplicationBuilder> 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,但是缺乏一个系统性的系列。
不自量力,想分享一点。


原文地址:
https://www.cnblogs.com/NCoreCoder/p/13426122.html

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言