DotNetCore跨平台~配置文件与配置代码如何共存
古人云《一山不容二虎》,而进行dotnet core时代之后,我们可以看到这样的一些官方的DEMO,它将数据连接串和其它配置项都直接硬编码在代码里,即在startup中进行定义,试问你在生产环境如何兼容!当然,你会说,可以在对应appsettings里进行配置,说它是对应的appsettings,是因为dotnet core下的配置文件有环境的区分,一般使用以下名称来表示不同的环境:
- 开发环境,Development
- 预发布环境,Staging
- 生产环境,Production
对于二者,配置文件和硬编码配置如何进行选择,如果两者都设置了,那到底应该以谁为准呢?大叔认为,如果二者都设置了,那以配置文件为准,当配置文件没有定义时,再以硬编码配置为准,这就是他们的优先级,原因有下面几点:
- 硬编码方便在开发环境去调试
- 在指定运行环境后,配置文件根据环境的不同,选择不同的配置
- 优化级,配置文件 优于 硬编码
配置文件可能是这样(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文件进行加载!
感谢咱们阅读!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2015-10-13 Node.js与Sails~项目结构与Mvc实现
2014-10-13 MVVM架构~knockoutjs系列之数组的$index和$data