使用 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()); // 其它代码 ... }
看起来是不是很疑惑?
到底哪种才是正规的呢?
其实啊,这里隐含了一个我们常常会忽略的逻辑 我们必须先拥有一样东西,然后配置这样东西,最后使用这样东西。
或者这么说吧: 我们必须先添加/购买某样东西,然后配置设置这样东西,最后使用这样东西。
有了这个认知,那么我们就可以把上面两个方法对号入住:
ConfigureServices()
方法主要就是拥有这样东西,准确的说就是为后面的依赖注入 添加一些服务。Configure()
方法就是在添加了服务的基础上,配置这些服务。
但是呢,其实现实中还有一种思维 我们可以在买/添加/拥有某样东西的时候就配置它。也就是说拥有和配置可以一气呵成。这就是 AddCors()
方法带参数和不带参数的区别。
因此,我们可以很明确的说,ASP.NET Core 官方默认约定:
Startup.ConfigureServices()
用于添加服务或者依赖项目,主要的作用就是添加Startup.Configure()
方法用于配置服务或者依赖项,主要的作用就是配置。- 虽然可以在
Startup.ConfigureServices()
既添加又配置服务,但是,我们不建议这么做?
马后炮
其实添加 CORS
支持这个例子太简单,以至于上面的区别有点勉强,毕竟 先添加后配置 和 添加同时配置 看起来就是没差别
目前尚无回复