在AspNetCore中Application的Startup类

相关文档:Startup

Startup类

Startup类用来配置应用的服务和请求管道:

  • 通过ConfigureServices方法配置Application需要用到的服务
  • 通过Configure方法配置Application请求管道

Startup的调用

  • Porgram类里通过WebHostBuilder的扩展方法UseStartup<Tstartup>来使用

Startup的构造函数

Startup构造函数可以包含已经被host依赖注入了的两个类:HostingEnvironment 和 Configuration
当然Startup的构造函数的重载按照需求自行添加删除参数

  • 通过IHostingEnvironment可以针对当前应用环境来配置相关服务
  • 通过IConfiguration在Startup期间获取应用的相关配置

小提示:

1.以上是通过HostingEnvironment来区分环境从而达到对某些特定服务的配置注入,当然我们也可以对Startup来动刀子,只需要对Startup进行重命名,比如开发环境时,对应新建StartupDeployment.cs,正式环境时,新建StartupProduction.cs,那么当应用在运行时,会自行根据当前的环境去调用对应环境的Startup类文件。
2.如果你同时新建了Startup.cs文件和StartupDeployment.cs文件,那么如果应用运行在开发环境时,会选择StartupDeployment.cs进行加载执行

ConfigureService方法

ConfigureService方法:给应用程序添加服务到服务容器(DI)中去

  • 可选择的
  • 被webhost调用,且一定在Configure方法之前被调用,从而去配置应用服务
  • 在Configure方法之前调用的原因是,Configure方法中可能会用到ConfigureService中配置的服务类
  • 按照一定的规约去配置
  • 当然一些很基础的类并不是由ConfigureService去添加的,就比如说之前提到的HostingEnvironment和Configuration类,这些类是WebHost调用Startup方法之前注册的,具体可以参照Hosting

关于AspNetCore自带的依赖注入方式,可以去查阅ISerivceCollection的相关内容
或者蒋老师的博客IOC

Configure方法

Configure方法:用来特定应用如何对HttpRequest请求进行响应

  • 请求管道是通过给ApplicationBuilder实例添加中间件来实现配置的
  • ApplicationBuilder在Configure方法中是可以使用的,但是它并不是在ConfigureService方法中去配置注入的,而是通过Hosting直接创建并传递给Configure方法直接使用

ApplicationBuilder的扩展方法Use方法,没被调用一次就意味着给请求管道添加一道中间件。比如说,app.UseMvc就配置MVC作为默认管道处理句柄
在整个请求管道中,每一个管道除了负责处理相关逻辑之外,还负责去唤起下一个管道的执行

链式传递

Startupl类无非是通过ConfigureService方法和Configure方法来配置应用服务和请求管道的,那么对于Startup的本质抓住了,我们就可以直接在Program类里面通过链式传递的法则一步步将实例传递下去,在每一步做好相应的服务注册和请求管道配置即可

public class Program
{
    public static IHostingEnvironment HostingEnvironment { get; set; }
    public static IConfiguration Configuration { get; set; }

    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                HostingEnvironment = hostingContext.HostingEnvironment;
                Configuration = config.Build();
            })
            .ConfigureServices(services =>
            {
                services.AddMvc();
            })
            .Configure(app =>
            {
                if (HostingEnvironment.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Error");
                }

                // Configuration is available during startup. Examples:
                // Configuration["key"]
                // Configuration["subsection:suboption1"]

                app.UseMvcWithDefaultRoute();
                app.UseStaticFiles();
            })
            .Build();
}

Startup Filters

使用IStartupFilter可以很方便地在Configure方法中配置的中间层管道之前或之后添加中间件

  • 定义中间件类
  • 集成IStartupFilter实现Filter类,并在其中使用定义的中间类
  • 在ConfigureService方法中注册你是先的Filter类,以便后续需要使用到

猜你喜欢

转载自blog.csdn.net/u010792238/article/details/79798681
今日推荐