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

古人云《一山不容二虎》,而进行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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将数组前n个和后m-n个整体逆置的实现

#include <iostream>using namespace std;/*void inverst(int *R,int s,int t){int k,w;for(ks;k<(st)/2;k){wR[k];R[k]R[t-ks];R[t-ks]w;} } int main() {int A[10],i,m;cout<<"请输入10个数&#xff1a;";for(i0;i<10;i){cin>>A[i];}cout&…

高效实用的.NET开源项目

似乎...很久很久没有写博客了&#xff0c;一直都想写两篇&#xff0c;但是却没有时间写。感觉最近有很多事情需要处理&#xff0c;一直都是疲于奔命&#xff0c;一直到最近才变得有些时间学习和充电。最近没有事情都会看一些博客和开源项目&#xff0c;发现介绍开源项目的文章似…

nssl1254-A(林下风气)【树形dp】

正题 题目大意 求一棵树上有多少个联通块的最大值和最小值差为k。 解题思路 其实直接用差<k的减去差<k的就是等于k的答案。 然后枚举一个点为最大值&#xff0c;然后只往小编号扩张就好了(不重)。 code #include<cstdio> #include<cstring> #include<a…

JVM(Java虚拟机)优化大全和案例实战

转载自 JVM&#xff08;Java虚拟机&#xff09;优化大全和案例实战 堆内存设置 原理 JVM堆内存分为2块&#xff1a;Permanent Space 和 Heap Space。 Permanent 即 持久代&#xff08;Permanent Generation&#xff09;&#xff0c;主要存放的是Java类定义信息&#xff0c;与…

对ASCALL码的理解

因为计算机只能识别0和1&#xff0c;相当于一个二进制&#xff0c;即位 程序中8个位构成一个字节&#xff0c;这样总共 2的八次方是等于 256 而早期美国的程序员只对0-128进行了编码 第0&#xff5e;32号及第127号(共34个)是控制字符或通讯专用字符&#xff0c;如控制符&#…

nssl1255-B(轻功)【SPFA,分层图】

正题 题目大意 有k中轻功&#xff0c;n个木桩&#xff0c;每种轻功可以消耗wisw_i\ swi​ s飞过aia_iai​个木桩&#xff0c;有些木桩有不可以被某种轻功飞过的限制&#xff0c;然后切换一次轻功要WsW\ sW s 解题思路 将图分成kkk层&#xff0c;每层表示在不同的轻功状态&…

EFCore废弃了TransactionScope取而代之的Context.Database.BeginTransaction

TransactionScope是.net平台基于的分布式事务组件&#xff0c;它默认为本地事务&#xff0c;同时当系统有需要时可以自动提升为分布式事务&#xff0c;而对系统的前提是要开启MSDTC服务&#xff0c;必要时需要在数据库服务器与应用服务器之间添加hosts的映射&#xff0c;这些在…

从 Spring Cloud 看一个微服务框架的「五脏六腑」

转载自 从 Spring Cloud 看一个微服务框架的「五脏六腑」 Spring Cloud 是一个基于 Spring Boot 实现的微服务框架&#xff0c;它包含了实现微服务架构所需的各种组件。 注&#xff1a;Spring Boot 简单理解就是简化 Spring 项目的搭建、配置、组合的框架。因为与构建微服务本…

eclipse导入github项目

首先登录github&#xff0c;找到项目&#xff0c;复制项目地址 复制地址在上面 即可导入成功 然后现在就可以玩游戏了 空手套白狼&#xff0c;github真的是白嫖&#xff0c;程序员必备之品。

nssl1256-C(盟主的忧虑)【并查集】

正题 题目大意 n个点的一棵树&#xff0c;增加了m条密道。对于树上每条边(A,B)(A,B)(A,B)被破坏后&#xff0c;要求A∼BA\sim BA∼B经过密道最短。 解题思路 引理:对于每个道路被破坏&#xff0c;最多只会经过一条边。 证明:对于每个答案&#xff0c;被破坏后&#xff0c;所在…

From Agile To DevOps - 微软开发部门 DevOps 经验谈

在 2013 年 11 月 13 日&#xff0c;我们正式发行了 Visual Studio 2013&#xff0c;以及全新的 Visual Studio Online 服务。但在服务发表之后&#xff0c;Visual Studio Online 却发⽣了异常&#xff0c;造成七个小时服务中断&#xff0c;这是因为在服务上线时&#xff0c;我…

RESTful API 最佳实践

转载自 RESTful API 最佳实践 RESTful 是目前最流行的 API 设计规范&#xff0c;用于 Web 数据接口的设计。 它的大原则容易把握&#xff0c;但是细节不容易做对。本文总结 RESTful 的设计细节&#xff0c;介绍如何设计出易于理解和使用的 API。 一、URL 设计 1.1 动词 宾…

selenium以及chromdrive安装

selenium的安装比较简单&#xff0c;直接pip install selenium就可以了 看有些网上写的chromedrive安装好麻烦啊&#xff0c;我win10自己试了下&#xff0c;感觉并不需要配置那么多环境变量。 直接性 http://npm.taobao.org/mirrors/chromedriver/ 找到相应的chrome版本即可 至…

将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的空间。表中不允许又重复的数据

#include<iostream> using namespace std;typedef struct lnode {//定义结点类型int data;struct lnode *next;//递归定义 } lnode,*LinkList;void CreateList(LinkList &L,int n) {//创建新链表Lnew lnode;//生成一个头结点L->nextNULL;//结点L的next置空for(int…

ssl提高组周二备考赛【2018.10.30】

前言 依旧想去德育基地… 成绩 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC1112017xxy2017xxy2017xxy2102102104040401001001007070702222017myself2017myself2017myself1901901902020201001001007070703332017lxf2017lxf2017lxf1801801800009090909090904442017…

通过C#/.NET API使用CNTK

CNTK v2.2.0提供C#API来建立、训练和评估CNTK模型。 本节概要介绍了CNTK C#API。 在CNTK github respository中可以找到C#训练示例。 使用C&#xff03;/ .NET管理API构建深层神经网络 CNTK C#API 通过CNTKLib命名空间提供基本操作。 CNTK操作需要一个或两个具有必要参数的输入…

Kafka Controller Redesign 方案

转载自 Kafka Controller Redesign 方案 Kafka Controller 是 Kafka 的核心组件&#xff0c;在前面的文章中&#xff0c;已经详细讲述过 Controller 部分的内容。在过去的几年根据大家在生产环境中应用的反馈&#xff0c;Controller 也积累了一些比较大的问题&#xff0c;而针…

做个人网站的原因

昨天b站上看视频&#xff0c;浏览评论时&#xff0c;看到一个网址 https://xiaoyou66.com/ 博主写了大概一百篇的文章&#xff0c;我进来的时候真的是被这js特效给惊到了&#xff0c;个人网站也能变得这么二次元嘛&#xff0c;讲实话&#xff0c;光是看这酷炫的页面都比较有欲望…

nssl1257-A【数论】

正题 题目大意 对于n个数组成的序列&#xff0c;求排好序需要最少交换次数的期望次数。 解题思路 我们可以先求出需要次数总和在乘上n!n!n!的逆元 先打一个表&#xff0c;不难发现 f(n)f(n−1)∗n(n−1)(n−1)!f(n)f(n-1)*n(n-1)(n-1)!f(n)f(n−1)∗n(n−1)(n−1)! 然后我们在…

一文理解Netty模型架构

转载自 一文理解Netty模型架构 本文基于Netty4.1展开介绍相关理论模型&#xff0c;使用场景&#xff0c;基本组件、整体架构&#xff0c;知其然且知其所以然&#xff0c;希望给读者提供学习实践参考。 1 Netty简介 Netty是 一个异步事件驱动的网络应用程序框架&#xff0c;用…