c# - .net core 中的设置层次结构
问题描述
我想混合使用 .net 核心和 .net 框架应用程序共享共同的 app.configs。
例如 :
app.settings
\WebAppOne\app.settings
\WebAppOne\SubAppOneA\app.settings
\WebAppTwo\app.settings
我希望能够将这些应用程序发布到 IIS,并且在 WebAppOne\SubAppOneA 中能够从根 app.Settings 以及 \WebAppOne\app.settings 中提取设置
我已经尝试过构建应用程序,并尝试通过 ConfigurationManager 访问设置,希望它能开箱即用:
this.LocalConnectionString = ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
this.ChildConnectionString = ConfigurationManager.ConnectionStrings["childDb"].ConnectionString;
但很明显,这并没有像我希望的那样奏效。有没有办法做到这一点?
解决方案
你的标题表明你想要Microsoft.Extensions.Configuration
为你的配置。这也可以在完整的框架项目中使用,并且还支持 XML。
对于您要使用的分层方案,您必须自己实现:如何搜索 XML 文件以及它们应该如何分层。
使用 .NET Core 配置配置系统时,不能使用ConfigurationManager
. 相反,您将不得不使用IConfiguration
. 您可以直接使用读取值,IConfiguration
但我建议使用选项模式或至少将配置绑定到使用ConfigurationBinder
.
下面是一个关于如何Microsoft.Extensions.Configuration
在 .NET Core 之外使用及其提供的托管模型的最小示例:
对于初学者来说,这是一个配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<Settings>
<ConnectionStrings>
<MyDb>foo</MyDb>
<ChildDb>bar</ChildDb>
</ConnectionStrings>
</Settings>
要绑定到的选项类:
class ConnectionStringOptions
{
public string MyDb { get; set; }
public string ChildDb { get; set; }
}
以下将创建配置并将其绑定到选项。服务提供者用于获取选项的第二部分通常使用依赖注入自动完成,但这不是必需的。
var configurationBuilder = new ConfigurationBuilder()
// TODO: Add more XML files based on the search and layering rules.
.AddXmlFile("appSettings.xml");
var configuration = configurationBuilder.Build();
var services = new ServiceCollection()
.AddOptions()
.Configure<ConnectionStringOptions>(configuration.GetSection("ConnectionStrings"));
var serviceProvider = services.BuildServiceProvider();
var options = serviceProvider.GetRequiredService<IOptions<ConnectionStringOptions>>();
var connectionStringOptions = options.Value;
要进行编译,您需要以下 NuGet 包:
Microsoft.Extensions.Configuration.Xml
Microsoft.Extensions.DependencyInjection
Microsoft.Extensions.Options.ConfigurationExtensions
推荐阅读
- spring - 如何以功能方式在@RefreshScope 中注册spring bean?
- wpf - 如何改变文本块的高度
- mysql - mysql - my.ini server-id 变量不会改变
- java - SpringBoot 2 无法在 tomcat 9 和 8.5 上运行
- javascript - 指南针航向 - 多次旋转
- javascript - Javascript - 以数字计算字符串数组的长度
- ios - 在 CoreData 模型中存储(long long)
- python - 在while循环条件中分配给函数返回值并沿途捕获异常
- sas - 在 SAS 中使用 Compress and Scan 创建新变量
- php - 如何从 Symfony 4.1 的包中获取自定义配置 yaml 文件?