首页 技术 正文
技术 2022年11月7日
0 收藏 506 点赞 761 浏览 1505 个字

回到目录

古人云《一山不容二虎》,而进行dotnet core时代之后,我们可以看到这样的一些官方的DEMO,它将数据连接串和其它配置项都直接硬编码在代码里,即在startup中进行定义,试问你在生产环境如何兼容!当然,你会说,可以在对应appsettings里进行配置,说它是对应的appsettings,是因为dotnet core下的配置文件有环境的区分,一般使用以下名称来表示不同的环境:

  1. 开发环境,Development
  2. 预发布环境,Staging
  3. 生产环境,Production

对于二者,配置文件和硬编码配置如何进行选择,如果两者都设置了,那到底应该以谁为准呢?大叔认为,如果二者都设置了,那以配置文件为准,当配置文件没有定义时,再以硬编码配置为准,这就是他们的优先级,原因有下面几点:

  1. 硬编码方便在开发环境去调试
  2. 在指定运行环境后,配置文件根据环境的不同,选择不同的配置
  3. 优化级,配置文件 优于 硬编码

配置文件可能是这样(Production和Staging环境),一般development不需要配置,直接写在代码里就行了,调试方便!

DotNetCore跨平台~配置文件与配置代码如何共存

程序中直接使用配置可以是这样(Development环境)

DotNetCore跨平台~配置文件与配置代码如何共存

核心的配置策略实现部分

下面是仓储服务在注册时,选择配置的策略,当然,你可以把这种逻辑做成一种装饰,感觉更好。

public class EFOptionsExtension : ILindOptionsExtension
{
private readonly Action<RepositoryOptions> _configure; public EFOptionsExtension(Action<RepositoryOptions> configure)
{
_configure = configure;
}
public void AddServices(IServiceCollection services)
{
var options = new EFOptions();
_configure?.Invoke(options);//装饰
if (oConfigFileHelper.Get<EFOptions>().ConnString != null) //配置文件优先硬编码
{
options.ConnString = ConfigFileHelper.Get<EFOptions>().ConnString;
}
if (ConfigFileHelper.Get<EFOptions>().DbType != DbType.None)
{
options.DbType = ConfigFileHelper.Get<EFOptions>().DbType;
}
services.AddSingleton<ILogger, FileLogger>();//日志
services.AddSingleton(options);//ef配置
services.AddTransient(typeof(DbContext), options.DbContextType);//注册数据上下文,实例模式
services.AddTransient(typeof(IRepository<>), typeof(EFRepository<>));//注册数据仓储
}
}

在我们进行发布之后,一般把dotnet core发布到linux或者直接放在docker容器里运行,这时只要设置对应的环境变量即可,非常方便!

ENV ASPNETCORE_ENVIRONMENT="Production"

设置完成后,dotnet core会自己选择对应的appsettings.Production.json文件进行加载!

感谢咱们阅读!

回到目录

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,999
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,357
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,140
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848