DotNetCore跨平台~配置文件与配置代码如何共存
古人云《一山不容二虎》,而進(jìn)行dotnet core時(shí)代之后,我們可以看到這樣的一些官方的DEMO,它將數(shù)據(jù)連接串和其它配置項(xiàng)都直接硬編碼在代碼里,即在startup中進(jìn)行定義,試問(wèn)你在生產(chǎn)環(huán)境如何兼容!當(dāng)然,你會(huì)說(shuō),可以在對(duì)應(yīng)appsettings里進(jìn)行配置,說(shuō)它是對(duì)應(yīng)的appsettings,是因?yàn)閐otnet core下的配置文件有環(huán)境的區(qū)分,一般使用以下名稱來(lái)表示不同的環(huán)境:
開(kāi)發(fā)環(huán)境,Development
預(yù)發(fā)布環(huán)境,Staging
生產(chǎn)環(huán)境,Production
對(duì)于二者,配置文件和硬編碼配置如何進(jìn)行選擇,如果兩者都設(shè)置了,那到底應(yīng)該以誰(shuí)為準(zhǔn)呢?大叔認(rèn)為,如果二者都設(shè)置了,那以配置文件為準(zhǔn),當(dāng)配置文件沒(méi)有定義時(shí),再以硬編碼配置為準(zhǔn),這就是他們的優(yōu)先級(jí),原因有下面幾點(diǎn):
硬編碼方便在開(kāi)發(fā)環(huán)境去調(diào)試
在指定運(yùn)行環(huán)境后,配置文件根據(jù)環(huán)境的不同,選擇不同的配置
優(yōu)化級(jí),配置文件?優(yōu)于?硬編碼
下面是倉(cāng)儲(chǔ)服務(wù)在注冊(cè)時(shí),選擇配置的策略,當(dāng)然,你可以把這種邏輯做成一種裝飾,感覺(jué)更好。
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) //配置文件優(yōu)先硬編碼
? ? ? ? ? ? {
? ? ? ? ? ? ? ? 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);//注冊(cè)數(shù)據(jù)上下文,實(shí)例模式
? ? ? ? ? ? services.AddTransient(typeof(IRepository<>), typeof(EFRepository<>));//注冊(cè)數(shù)據(jù)倉(cāng)儲(chǔ)
? ? ? ? }
? ? }
在我們進(jìn)行發(fā)布之后,一般把dotnet core發(fā)布到linux或者直接放在docker容器里運(yùn)行,這時(shí)只要設(shè)置對(duì)應(yīng)的環(huán)境變量即可,非常方便!
ENV ASPNETCORE_ENVIRONMENT="Production"設(shè)置完成后,dotnet core會(huì)自己選擇對(duì)應(yīng)的appsettings.Production.json文件進(jìn)行加載!
原文地址:http://www.cnblogs.com/lori/p/7663708.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的DotNetCore跨平台~配置文件与配置代码如何共存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring cloud+dotnet
- 下一篇: 高效实用的.NET开源项目