AspNet Core 多環境的配置方式有一種基于Startup類的選擇,
- webBuilder.UseStartup() //顯式注冊、會靶定Startup.cs
- webBuilder.UseStartup(Assembly.GetExecutingAssembly().FullName); //多環境寫法,根據環境變數選擇基于約定名的類
還有其它兩種方式這里不細說,配置多環境很明顯不是采用顯式注冊,因此以下測驗均采用方式二
嘗試一:不同環境的優先級
注:.net core中很多基于約定的配置,一般體現在名稱上,例如 Startup{EnvironmentName} 就是一個約定了環境的啟動項
public class Startup { public void ConfigureServices(IServiceCollection services) { IConfigurationRoot root = new ConfigurationBuilder().AddJsonFile("appsettings.Production.json").Build(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } }默認
public class StartupProduction { public void ConfigureServices(IServiceCollection services) { IConfigurationRoot root = new ConfigurationBuilder().AddJsonFile("appsettings.Production.json").Build(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } }Production環境
結論:很明顯是環境變數優先
嘗試二:不同命名空間下的優先級
public class Startup { public void ConfigureServices(IServiceCollection services) { IConfigurationRoot root = new ConfigurationBuilder().AddJsonFile("appsettings.Production.json").Build(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } }無命名空間
namespace Other { public class Startup { public void ConfigureServices(IServiceCollection services) { IConfigurationRoot root = new ConfigurationBuilder().AddJsonFile("appsettings.Production.json").Build(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } } }任意命名空間
namespace AspnetCore { public class Startup { public void ConfigureServices(IServiceCollection services) { IConfigurationRoot root = new ConfigurationBuilder().AddJsonFile("appsettings.Production.json").Build(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } } }當前命名空間
結論:無命名空間優先在情理之中,可任意命名空間竟然比當前的優先集要高,有些出人意料
后續
其一:多環境配置方式往小的說,還可以有基于組態檔的選擇《傳送門》,和基于配置方法的選擇兩種配置方式
其二:其它兩種方式分別是
- webBuilder.Configure(app => {}) //注冊一個DelegateStartup物件
- webBuilder.UseSetting("StartupAssembly", Assembly.GetEntryAssembly().FullName) //直接指定法
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/246699.html
標籤:.NET Core
