回到目录

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

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

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

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

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

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

核心的配置策略实现部分

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

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

感谢咱们阅读!

回到目录

DotNetCore跨平台~配置文件与配置代码如何共存的更多相关文章

  1. 使用配置文件来配置JDBC连接数据库

    1.管理数据库连接的Class 代码如下: package jdbcTest;import java.sql.Connection;import java.sql.DriverManager;impo ...

  2. DotNetCore跨平台~Quartz定时单次任务

    之前写过一篇文件<DotNetCore跨平台~Quartz热部署的福音-监控文件夹的变化>,今天主要把框架优化了一下,支持外部触发,并支持外部将参数以JobDataMap形式进行输入,然后 ...

  3. DotNetCore跨平台~Dapper的使用

    回到目录 Dapper作为小型ORM的代表作品被我们应用到了dotnet core的项目中,下面将把自己在项目中使用dapper进行curd操作的过程写一下,后期可能会遇到一些问题,大叔也会在这个系列 ...

  4. DotNetCore跨平台~聊聊中间件

    回到目录 在进行.net core平台之后,我们如果希望在请求过程中添加一些事件是非常容易的,你可以把这些事件做成一个中间件Middleware,然后这些中间件就会以Http pipeline的管道方 ...

  5. Mybatis-基于配置文件的配置(——纪念这个即将被抛弃的孩子)

    虽然内心相信Mybatis基于配置文件的配置早已经在实战之中被注解所遗忘,但是我相信还是会有一小部分人还是需要这种技术去维护原有使用这种方式去搭建的项目. 废话不多说首先使用框架包是不能少的了.导入M ...

  6. SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池

    三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

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

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

  8. m_Orchestrate learning system---二十九、什么情况下用数据库做配置字段,什么情况下用配置文件做配置

    m_Orchestrate learning system---二十九.什么情况下用数据库做配置字段,什么情况下用配置文件做配置 一.总结 一句话总结: 配置文件 开发人员 重置 数据库 非开发人员 ...

  9. SpringBoot(二) 主程序详解和配置文件如何配置

    SpringBoot主程序详解 /** * @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用 */ @SpringBootApplication ...

随机推荐

  1. Httprequest 获取url 常用方法

    HttpServletRequest常用获取URL的方法         1.request.getRequestURL() 返回的是完整的url,包括Http协议,端口号,servlet名字和映射路 ...

  2. 【★】深入BGP原理和思想【第一部】

    前言:学思科技术我想说,浅尝辄止,不是天才千万别深钻.和我研究高等数学一样,越深入就会发现越多的问题与不合理之处.尤其对于IT界,算法的最终解释权还是掌握在老外手中,所以对于有些细节,我们" ...

  3. Python杨辉三角形

    RT Show me the Code def triangles(): b = [1] while(True): yield b b = [1] + [b[i] + b[i+1] for i in ...

  4. 团队作业8——第二次项目冲刺(Beta阶段)Day7——5.26

    展开圆桌式会议: 会议内容:1.汇总BETA阶段的成果.2.针对BETA阶段的大家的获得的收获进行了讨论.3.对整个团队项目的过程进行了总结.每个人的工作分配: 队员 今日任务 贡献比 林燕 做最后测 ...

  5. 201521123096《Java程序设计》第六周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 (1)clone方法 1.1 Object ...

  6. 201521123052《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 学习了更多markdown的知识 参考资料: 百度脑图 XMind 2. 书面作 ...

  7. 201521123008《Java程序设计》第四周学习总结

    1.本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.包的命名规范 2.面向对象设计:名词/动词 3.类的设计技巧:一定将属性设计为私有priv ...

  8. 杨晨露 Java 第一周总结

    1.学习内容总结 (1)Integer类在对象中包装了一个基本类型int的值.Integer类型的对象包含一个int类型的字段.该类提供了多个方法,能在int类型和String类型之间互相转换,还提供 ...

  9. #黑客社会工程学攻防演练#[Chapter 1]

    1.1 什么是社会工程学 社会工程学(Social Engineering)是关于建立理论通过自然的.社会的和制度上的途径并特别强调根据现实的双向计划和设计经验来一步一步地解决各种社会问题.社会工程学 ...

  10. 《JAVA程序设计》第10周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中fin ...