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


posted @   章为忠  阅读(2395)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示