程序地带

Asp.Net Core启动类选择


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) //直接指定法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sunpan/p/14254953.html

随机推荐

vue.js之插槽(v-slot)

插槽父组件在引用子组件时希望向子组价传递模板内容;子组件让父组件传过来的模板内容在所在的位置显示;子组件中的就是一个槽,可以接收父组件传过来的模板内容...

月亮贩售快乐 阅读(837)

python数据结构————双端队列的介绍与应用

何谓双端队列双端队列是与队列相似的有序集合,他有一前一后两端,操作方面是队列与栈的结合,添加与移除均可在两端进行。双端队列的python实现我们需要设定一个对...

Leosaf 阅读(699)

static 赋值和初始化的区别

1、静态变量在定义时未显式地指定初值,则自动初始化为相应类型的零值(数值型为0或0.0;字符型为''),即静态...

sworsman31415926 阅读(476)

中科大文献管理笔记——文献调研起步

中科大文献管理笔记——文献调研起步一、快速了解研究方向二、科大图书馆三、文献筛选四、检索实例1:快速了解一个领域的情况1.首页2.基本检索3.WOS核心合集五、检索实例2:...

CSN934342201 阅读(528)

CentOS-7安装

CentOS-7安装下载镜像,个人选择CentOS-7-x86_64-DVD-1810.isoVMWare安装CentOS-71、新建虚拟机2、自定义安装3、稍后安装系统4、版本选择Ce...

码上回来 阅读(353)

KKB : Cookie和 Session基本知识点

什么是会话跟踪技术?会话跟踪是web程序中常用的技术,用来跟踪用户的整个会话。保持对用户会话期间的数据管理。常用的会话跟踪技术是Cookie和SessionCookie通过...

你怎么敢的呀 阅读(568)

Linux下mysql5.7的彻底卸载

Linux下mysql的彻底卸载1、查看mysql的安装情况rpm-qa|grep-imysql2、删除上图安装的软件rpm-evmysql-community-libs-5.7.27-1.el6.x...

还没秃的小菜鸡 阅读(309)

如何评价2021年的B站跨年晚会

搬一波V站的评论202101012337489中国概念股周四收盘涨跌互现跨年夜B站股价重挫9%https://www.cnbeta.com/articles/tech/1072581.htm全都是泡沫...

zhaoolee 阅读(450)