[英]How to register two configurations that map to the same type in DI injector in ASP.NET Core
[英]How to configure ASP.NET Core to have different configurations for two deployed applications
我一直在学习 ASP.NET 环境变量和配置。
我看到,默认情况下,在我自己的本地环境中运行时, appsettings.Development.json中的任何设置都将覆盖appsettings.json中的相同设置。 并且appsettings.Development.json未部署,因此在部署时不会覆盖任何设置。
我的问题:有没有人知道一种方法可以为多个部署的配置使用相同的机制?
例如,我有一个网站和该网站的演示版。 两者都使用相同的代码库,但演示站点的一些设置需要不同。 如果我可以创建appsettings.Demo.json并在其中放置需要仅为演示站点覆盖的任何设置,那就太好了。
目前,我只是在文件中设置了IsDemoSite
设置。 这可行,但如果我可以有不同的配置设置,它会更加优雅。
我找不到任何关于部署时具有不同配置的文档。
此外,其中一个区别是演示站点使用不同的数据库连接字符串。 所以我需要能够在运行迁移等时设置我正在处理的版本。
好吧,我也有同样的事情要做 - 你的自定义 appsettings 文件已经步入正轨。
就我而言,我想要一个单独的开发、生产、wsl 和 docker 配置。 解决方案 - 鉴于我在单独的虚拟实例上运行 prod 和 dev,是使用旧的和真正的ASPNETCORE_ENVIRONMENT
变量。
我创建了所需的appsettings
变体(appsettings.docker 等)并为给定文件设置了上述变量。
此外,当我的应用程序启动时,它会获取正确文件的路径(部分名称取自ASPNETCORE_ENVIRONMENT
)并将其作为普通 json 文件加载到.ConfigureAppConfiguration
的CreateHostBuilder
方法。 它非常适合我的要求 - 应该对你有好处。
您可以在此处找到示例。
至于设置ASPNETCORE_ENVIRONMENT
- 取决于您所在的主机系统:
# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=publish /app .
ENV ASPNETCORE_ENVIRONMENT="docker"
ENTRYPOINT ["dotnet", "ScanApp.dll"]
对于 Windows:
遵循本指南 - 它将引导您完成全局和应用内设置
对于 WSL - 在您的launchSettings.json
中:
"WSL": {
"commandName": "WSL2",
"launchBrowser": true,
"launchUrl": "https://localhost:5051",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "wsl",
"ASPNETCORE_URLS": "https://localhost:5051;http://localhost:5050"
},
"distributionName": "Ubuntu-20.04"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.