• 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,但是缺乏一个系统性的系列。
    不自量力,想分享一点。

    如果对于内容有交流和学习的,可以加 .Net应用程序框架交流群,群号386092459

    分享一个公众号,关注学习/分享的

  • 相关阅读:
    php 处理 json_encode 中文显示问题
    php输出cvs文件,下载cvs文件
    php服务器端生成csv文件
    在VS2013中强制IIS Express应用程序池使用经典模式
    align=absMiddle属性设置
    30个惊人的插件来扩展 Twitter Bootstrap
    jquery.fullCalendar官方文档翻译(一款小巧好用的日程管理日历, 可集成Google Calendar)
    jquery操作select(取值,设置选中)
    Bootstrap Paginator 分页 demo.
    uniform 中checkbox通过jquery 选中
  • 原文地址:https://www.cnblogs.com/NCoreCoder/p/13426122.html
Copyright © 2020-2023  润新知