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

  1. 开发环境,Development

  2. 预发布环境,Staging

  3. 生产环境,Production

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

  1. 硬编码方便在开发环境去调试

  2. 在指定运行环境后,配置文件根据环境的不同,选择不同的配置

  3. 优化级,配置文件 优于 硬编码

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

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文件进行加载!

原文地址:http://www.cnblogs.com/lori/p/7663708.html

.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

  1. 【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )

    文章目录 前言 一.Groovy 配置文件格式 二.Groovy 配置文件读取 二.完整配置文件及解析代码示例 前言 在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 G ...

  2. Maven 配置文件 POM 的常用插件配置代码

    Maven 配置文件 POM 的常用插件配置代码 普通 将 Maven 多模块依赖集成打进一个 JAR 包(方法 1) 将 Maven 多模块依赖集成打进一个 JAR 包(方法 2) 生成单入口类 J ...

  3. Maven 配置文件 POM 的常用依赖配置代码

    Maven 配置文件 POM 的常用依赖配置代码 Lombok 测试 Junit 5 日志 Log4j2 & SLF4J & Lombok Spring Bean Spring Boo ...

  4. spring Boot 2 运维篇(spring boot程序的打包与部署,多环境开发配置文件的配置,spring boot集成日志框架)

    目录 1.SpringBoot程序的打包与运行 程序打包 程序运行 SpringBoot程序打包失败处理 命令行启动常见问题及解决方案 SpringBoot项目快速启动(Linux版) 2.配置高级 ...

  5. SpringBoot配置文件YAML配置注入(详解)

    目录 一.SpringBoot配置文件 1. SpringBoot默认配置文件 2. 配置文件的作用 3. 配置文件的位置 4. 多环境切换 方式一:多配置文件 方式二:一个配置文件(yaml的多文档 ...

  6. DotNetCore跨平台~EFCore数据上下文的创建方式

    对于DotNetCore来说,把大部分组件者放在DI容器里,在startup中进行注入,在类的构造方法中进行使用,如果某些情况下,无法使用这种DI的方式,也可以自己控制数据上下文的生产过程,下面说一下 ...

  7. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强 ...

  8. Mongodb在windows下配置文件的配置

    Mongodb在windows下通过配置文件配置和访问 博客分类: Mongodb 数据库 mongomongodbwindows配置 Mongodb配置文件配置: 第一步:在"D:\Mon ...

  9. log4net保存到数据库系列二:独立配置文件中配置log4net

    园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...

最新文章

  1. 半年 5 战 5 金:Kaggle 史上最快 GrandMaster 是如何炼成的?
  2. 原型机拱手让人,飞行器停售,谷歌创始人押注的飞行汽车,如今搁浅
  3. leetcode 28. Implement strStr() 实现strStr()
  4. Pandas的学习(2.Series的索引和切片、基本概念以及Series的运算)
  5. CC++——基本说明
  6. core和node开发小程序_node+微信小程序实现商城案例
  7. CRS磁盘force dismount引起的RAC节点宕机故障
  8. 企业级Docker Registry开源工具Harbor的用户使用指南
  9. 荣耀X20 SE评测:6400万高清美拍 2000元以下真香现场
  10. 《Linux编程》学习笔记 ·001【基本操作、常用命令】
  11. java graphics旋转_Java图像之自定义角度旋转(实例)
  12. CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境
  13. 1283 最简单的计算机
  14. Delphi学习视频02
  15. 小浩之利用Java完成一个抽奖小程序
  16. 所有程序员都应该知道的 6 个软件开发步骤
  17. 2021年高处安装、维护、拆除免费试题及高处安装、维护、拆除模拟考试题库
  18. 泛型一般有三种使用方式
  19. 两台电脑互传文件你还可以这么做
  20. Java开源工具库使用之java源代码生成库JavaPoet

热门文章

  1. [译]9条关于高性能ElasticSearch的配置建议
  2. 总结之前做项目中要注意的一些书写规范
  3. linux内核分析作业3:跟踪分析Linux内核的启动过程
  4. hdu 1879 继续畅通工程 (最小生成树)
  5. Xamarin效果第三篇之手机底部弹窗
  6. 使用 NetCoreBeauty 优化 .NET CORE 独立部署目录结构
  7. C# 代码生成二维码方法及代码示例(QRCoder)
  8. NET问答: 为什么仅有 getter 的属性,还可以在构造函数中赋值 ?
  9. C# 使用 CancellationTokenSource 终止线程
  10. Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step(二)