ASP.Net Core Startup类

我们了解了Program类如何负责创建和配置Web主机。但是,在构建和运行主机之前,Program类将调用startup类以进行进一步配置。它从类中调用Configure&ConfigureServices方法。

什么是Startup类

ASP.NET Core 启动(startup.cs)类是一个简单的类,不继承任何接口。这是我们配置请求管道和中间件的地方。我们还可以配置服务并将其添加到依赖项注入容器中。该类必须包含方法Configure,并且可以选择性的包含ConfigureServices方法。它类似于经典ASP.NET中的global.asax。  

为什么要使用Startup类?

Program类与Startup类是ASP.NET Core应用程序中最重要的两个类。应用程序的所有配置都在这两个文件中进行。

配置应用程序基础结构的Program类。

Program配置应用程序基础设施。program类在启动时创建web主机。然后,它配置日志记录DI容器。配置系统,Kestrel Web服务器,IIS集成等。它还将框架服务添加到DI容器中,以便我们可以使用它。

Startup类的作用

Startup类是我们配置应用程序组件的地方。Startup类具有两个主要功能。

  1. 配置服务以进行依赖注入。
  2. 它配置请求管道,管道处理对应用程序发出的所有请求。

Startup类的示例

启动类通常命名为startup.cs。它位于项目根目录中。Main方法是应用程序的入口点。它配置WebHost,对其进行构建并运行。然后,主机接收HTTP请求,并将其传递到请求管道。WebHost在构建WebHost之前调用UseStartup方法。 

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
       .UseStartup<Startup>();   

UseStartup方法指示WebHost在何处查找Startup类。启动类通过约定的方式命名。我们可以使用任何名称创建一个启动类。例如,如果我们希望将AppStartup用作Startup类,请记住将其包含在程序中

.UseStartup<AppStartup>()

启动中可用的服务

服务

目的

IApplicationBuilder

我们将此服务用于应用程序请求管道。

IHostingEnvironment

此服务提供当前的EnvironmentNameContentRootPathWebRootPathWeb根文件提供程序

ILoggerFactory

提供创建记录器的机制

IServiceCollection

这是一个DI容器。我们将服务添加到此容器中。

 

方法

可用服务

Startup Constructor

IHostingEnvironmentILoggerFactory

ConfigureServices

IServiceCollection

Configure

IApplicationBuilderIHostingEnvironmentILoggerFactory

配置服务

ConfigureServices是我们配置服务的方法。将服务添加到DI容器中。此方法是可选的。但是,如果存在,那么它是WebHost调用的第一个方法。ConfigureServices方法将服务实例(类型为IServiceCollection)作为参数。 服务的实例通过依赖注入注入到ConfigureService中。  

public void ConfigureServices(IServiceCollection services) {

IServiceCollection是DI容器。我们将服务添加到此容器中。  

services.AddMvc();

将服务添加到DI容器将使它们可用于依赖注入。这意味着我们可以在应用程序中的任何位置注入这些服务。依赖注入是ASP.NET Core的新功能之一。ASP.NET Core广泛使用依赖项注入。下面的示例显示了一种典型ConfigureServices方法。

public void ConfigureServices(IServiceCollection services) {
  services.Configure<CookiePolicyOptions>(options =>
  {
     options.CheckConsentNeeded = context => true;
     options.MinimumSameSitePolicy = SameSiteMode.None;
  });
  services.AddMvc();
}

Configure

Configure方法是必须的。在ConfigureServices方法之后调用它。configure方法允许我们配置ASP.NET Core请求管道。该请求管道指定应用程序应该如何响应HTTP请求。组成请求管道的组件称为中间件configure方法典型的配置如下所示。如果我们选择MVC Web应用程序(MVC)模板,那么Visual Studio生成如下的方法。

// 运行时将调用此方法。 使用此方法来配置HTTP请求管道。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }
      app.UseStaticFiles();
      app.UseCors("AllowAll");
      app.UseAuthentication();
      app.UseMvc(routes =>
        routes.MapRoute(
                   name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
            });
}

Configure方法需要 提供IApplicationBuilderHostingEnvironment的实例。上面的代码没有注入ILoggerFactory,但是我们可以这样做。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

然后,我们将中间件组件添加到IApplicationBuilder实例的实例中。第一行检查我们是否处于开发环境中。 如果是,它将使用扩展方法UseDeveloperExceptionPage注册DeveloperExceptionPage中间件。

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

在随后的几行中,我们将注册另外三个中间件。

app.UseStaticFiles();
app.UseCors("AllowAll");
app.UseAuthentication();

最后一行代码注册了MVC中间件。 在注册中间件时配置了路由。

app.UseMvc(routes =>
  routes.MapRoute(
     name: "default",
     template: "{controller=Home}/{action=Index}/{id?}");
});

configure方法

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
  }
  app.Run(async (context) =>
  {
    await context.Response.WriteAsync("Hello World!");
  });
}

我们使用应用程序的run方法来注册嵌入式中间件。启动类(startup.cs)类是我们配置应用程序组件的位置。可选ConfigureServices方法是我们注册DI服务的地方。Configure方法是我们建立请求管道的地方。然后,在构建和运行Web主机之前,CreateDefaultBuilder方法将读取启动内容以配置Web主机。

posted @ 2020-10-25 19:35  N-COUNT  阅读(306)  评论(0编辑  收藏  举报