zoukankan      html  css  js  c++  java
  • ASP.NET Core系列(三):启动类Startup

    前面讲了ASP.NET Core 的项目结构,查看完整的ASP.NET Core系列文章:https://www.cnblogs.com/zhangweizhong/category/1477144.html

    ASP.NET Core 里面一个比较重要的就是Startup.cs 类,包括加载配置, 通过依赖注入加载组件, 注册路由等都在此处进行。今天就来聊一聊Startup 类的作用和用法。

    与 ASP.NET 对比,ASP.NET Core 最显著的变化之一就是配置应用程序的方式,Global.asax、FilterConfig.cs 和 RouteConfig.cs 统统消失了,取而代之的是 Program.cs 和 Startup.cs。Program.cs 作为 Web 应用程序的默认入口,会自动调用Startup.cs 中的 ConfigureServices 方法 和 Configure 方法。大致流程如下图所示:
     

    Startup 类

    Startup 类是配置服务和应用的请求管道。

    Startup 类的作用:

      1. ConfigureServices方法用于定义(注册)应用程序所使用的服务。(如:ASP.NET Core MVC,Entity Framework Core,Identity 等);

      2. Configure方法用于定义请求管道的中间件,该管道将用于处理应用程序的所有请求。

      3. 注册服务添加方法是无序的,ASP.NET Core在应用程序启动的时候,只要有相应服务即可,而注册中间件时方法是有序的,管道内的每一个组件都可以选择是否将请求交给下一个组件,并在管道中调用下一个组件之前或之后执行某些操作。

     

    在应用启动时,ASP.NET Core 运行时会调用 ConfigureServices 和 Configure:

    public class Startup
    {
      // 运行时调用此方法。使用此方法向容器添加服务。
      public void ConfigureServices(IServiceCollection services)
      {
        //使用此方法向容器添加服务。
      }
      // 运行时调用此方法。使用此方法配置HTTP请求管道。
      public void Configure(IApplicationBuilder app, IHostingEnvironment env)
      {
        //使用此方法配置HTTP请求管道中间件。
      }
    } 

    Startup 类的构造函数提供注册config,log,env 等服务:

    public class Startup
    {
        private readonly IHostingEnvironment _env;
        private readonly IConfiguration _config;
        private readonly ILoggerFactory _loggerFactory;
       //构造函数,加载配置文件,注册log等
        public Startup(IHostingEnvironment env, IConfiguration config, 
            ILoggerFactory loggerFactory)
        {
            _env = env;
            _config = config;
            _loggerFactory = loggerFactory;
        }
       ...
    
    }

    ConfigureServices 方法

    方法是可选的; 但是如果使用的话,它会在WebHost的Configure方法之前被调用。 WebHost可能会在调用启动方法之前配置一些服务。 按照惯例,在这个方法中设置配置选项。

    对于需要大量设置的功能,在IServiceCollection上添加Add[Service]扩展方法。 下面示例将应用程序配置为使用Entity Framework,Identity和MVC的服务:

    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    
        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
    
        services.AddMvc();
    
        // Add application services.
        services.AddTransient<IEmailSender, AuthMessageSender>();
        services.AddTransient<ISmsSender, AuthMessageSender>();
    }

    ConfigureServices 将服务添加到服务容器,使其在应用和 Configure 方法中可用

     

    Configure 方法

    Configure方法用于指定ASP.NET应用程序如何响应HTTP请求。 通过将中间件组件添加到由依赖注入提供的IApplicationBuilder实例来配置请求管道。

    从下面的例子中,我们使用了几个扩展方法来配置支持:异常页和异常处理程序, 静态文件,  MVC, 和 Identity的管道。

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
    
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
    
        app.UseMvc();
    }

    每个 Use 扩展方法将一个或多个中间件组件添加到请求管道。 例如,UseMvc 扩展方法将路由中间件添加到请求管道,并将 MVC 配置为默认处理程序。

    其他服务(如 IHostingEnvironment 和 ILoggerFactory),也可以在 Configure 方法中指定

     

     最后

    1. 以上就将Startup 类简单的介绍完了,还有很多高级功能和用法,可以继续研究研究。
    2. 参考文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.2


  • 相关阅读:
    《Android深度探究HAL与驱动开发》学习笔记----第八章
    《Android深度探究HAL与驱动开发》学习笔记----第七章
    《Android深度探究HAL与驱动开发》学习笔记----第六章
    《Android深度探究HAL与驱动开发》学习笔记----第五章
    《Android深度探究HAL与驱动开发》学习笔记----第四章
    《Android深度探究HAL与驱动开发》学习笔记----第三章
    《Android深度探究HAL与驱动开发》学习笔记----第二章
    《Android深度探究HAL与驱动开发》学习笔记----第一章
    Android深度探索(卷一)HAL与驱动开发 第九章
    Android深度探索(卷一)HAL与驱动开发 第十章
  • 原文地址:https://www.cnblogs.com/zhangweizhong/p/11232336.html
Copyright © 2011-2022 走看看