DotNetCore跨平台~配置文件与配置代码如何共存
2017-10-16 00:00
267 查看
古人云《一山不容二虎》,而进行dotnet core时代之后,我们可以看到这样的一些官方的DEMO,它将数据连接串和其它配置项都直接硬编码在代码里,即在startup中进行定义,试问你在生产环境如何兼容!当然,你会说,可以在对应appsettings里进行配置,说它是对应的appsettings,是因为dotnet core下的配置文件有环境的区分,一般使用以下名称来表示不同的环境:
开发环境,Development
预发布环境,Staging
生产环境,Production
对于二者,配置文件和硬编码配置如何进行选择,如果两者都设置了,那到底应该以谁为准呢?大叔认为,如果二者都设置了,那以配置文件为准,当配置文件没有定义时,再以硬编码配置为准,这就是他们的优先级,原因有下面几点:
硬编码方便在开发环境去调试
在指定运行环境后,配置文件根据环境的不同,选择不同的配置
优化级,配置文件 优于 硬编码
下面是仓储服务在注册时,选择配置的策略,当然,你可以把这种逻辑做成一种装饰,感觉更好。
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容器里运行,这时只要设置对应的环境变量即可,非常方便!
设置完成后,dotnet core会自己选择对应的appsettings.Production.json文件进行加载!
原文地址:http://www.cnblogs.com/lori/p/7663708.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
开发环境,Development
预发布环境,Staging
生产环境,Production
对于二者,配置文件和硬编码配置如何进行选择,如果两者都设置了,那到底应该以谁为准呢?大叔认为,如果二者都设置了,那以配置文件为准,当配置文件没有定义时,再以硬编码配置为准,这就是他们的优先级,原因有下面几点:
硬编码方便在开发环境去调试
在指定运行环境后,配置文件根据环境的不同,选择不同的配置
优化级,配置文件 优于 硬编码
下面是仓储服务在注册时,选择配置的策略,当然,你可以把这种逻辑做成一种装饰,感觉更好。
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跨平台~配置文件与配置代码如何共存
- DotNetCore跨平台~配置文件与配置代码如何共存
- php微信开发 接口配置信息 如何代码实现,代码实现,入口文件 token 配置失败
- 【iOS开发-2】Info.plist文件的初步窥探:如何增减配置以及如何用代码调用里面的值
- 在Myeclipse中完成代码自动填充,自动提示功能的方法:以及如何在导入和导出配置文件。
- zf-关于评价器的开关所在的配置文件,与代码如何修改。
- UNIX环境高级编程源代码配置----如何不用作者自己写的apue.h头文件的方法
- 如何使用.NET配置文件
- [Config]如何利用ConfigurationSettings.AppSettings.GetValues读取配置文件中多个同Key的value
- 如何告诉spring初始化指定配置文件中的javabean
- 如何使用.NET配置文件(一)
- 如何用CSC.exe来编译Visual C#的代码文件
- 如何使用.NET配置文件(转载)
- 如何使用.NET配置文件
- 我的log4net 1.2.9 的配置文件和如何配置程序的说明
- 如何减少可执行文件的代码
- QuickReport 3.0的导出文件 *.qrp 如何用代码的方式保存成图片格式
- 如何使用.NET配置文件(二)
- SmartAssembly,用一行代码和简单的配置文件,几分钟轻松搞定客户端软件的自动升级。
- 如何在类库项目中添加配置文件??????