ASP.NET Core 中 `Startup.cs` 中的 `Startup.ConfigureServices()` 和 `Configure()` 有什么异同呢?

yufei       3 年 前       767

使用 ASP.NET Core 越久,就会有种错觉,同样的配置项在 Startup.ConfigureServices() 有种书写方式,在 Startup.Configure() 也有种书写方式,简直有点乱乱的。

比如设置跨域请求 CORS 的方式,可以是

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options => { options.AddDefaultPolicy(builder => {
            builder.AllowAnyOrigin();
        });
    });
    // 其它代码  ...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 其它代码 ...
    app.UseCors();
    // 其它代码 ...
}

也可以是

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
    // 其它代码 ...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 其它代码 ...
    app.UseCors(x => x.AllowAnyOrigin());
    // 其它代码 ...
} 

看起来是不是很疑惑?

到底哪种才是正规的呢?

其实啊,这里隐含了一个我们常常会忽略的逻辑 我们必须先拥有一样东西,然后配置这样东西,最后使用这样东西

或者这么说吧: 我们必须先添加/购买某样东西,然后配置设置这样东西,最后使用这样东西

有了这个认知,那么我们就可以把上面两个方法对号入住:

  1. ConfigureServices() 方法主要就是拥有这样东西,准确的说就是为后面的依赖注入 添加一些服务
  2. Configure() 方法就是在添加了服务的基础上,配置这些服务

但是呢,其实现实中还有一种思维 我们可以在买/添加/拥有某样东西的时候就配置它。也就是说拥有和配置可以一气呵成。这就是 AddCors() 方法带参数和不带参数的区别。

因此,我们可以很明确的说,ASP.NET Core 官方默认约定

  1. Startup.ConfigureServices() 用于添加服务或者依赖项目,主要的作用就是添加
  2. Startup.Configure() 方法用于配置服务或者依赖项,主要的作用就是配置。
  3. 虽然可以在 Startup.ConfigureServices() 既添加又配置服务,但是,我们不建议这么做?

马后炮

其实添加 CORS 支持这个例子太简单,以至于上面的区别有点勉强,毕竟 先添加后配置添加同时配置 看起来就是没差别

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.