.net core 从框架应用程序创建和传递IConfiguration
在我的.NETFramework4.7.2应用程序中,我正在使用一个需要配置为IConfiguration对象的库。我知道配置的模式,并且在App.config中包含了xml元素。但现在我在解析app.config的这一部分并将其转换为IConfiguration时遇到了问题。 如果我将xml元素放在一个单独的xml文件中,我知道我可以这样做:.net core 从框架应用程序创建和传递IConfiguration,.net-core,app-config,.net Core,App Config,在我的.NETFramework4.7.2应用程序中,我正在使用一个需要配置为IConfiguration对象的库。我知道配置的模式,并且在App.config中包含了xml元素。但现在我在解析app.config的这一部分并将其转换为IConfiguration时遇到了问题。 如果我将xml元素放在一个单独的xml文件中,我知道我可以这样做: var config = new ConfigurationBuilder().AddXmlFile("config.xml").B
var config = new ConfigurationBuilder().AddXmlFile("config.xml").Build();
这将给我一个IConfiguration的实例,但我们不希望有单独的配置文件。理想情况下使用单个App.config
请问我有什么选择?
谢谢。您可以获取xml的特定部分,并传递它而不是
IConfiguration
,因为IConfigurationSection
继承自IConfiguration
XML示例和代码
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<mySettings>
<setting1>test</setting1>
<setting2>abc</setting2>
</mySettings>
</configuration>
谢谢,我已经知道了,正如我提到的,我不想有一个单独的test.xml文件,我想在App.config中包含这一部分。谢谢,你认为从已经知道其App.config的应用程序中执行这一行(var document=XDocument.Load(“App.config”);)是一种干净的方式吗?我不会说它是干净的,但我不确定其他选项(我也看到使用ConfigurationManager构建xml/json)是否更干净。任何解决方案都可能看起来不干净,因为它会以其他方式存在。谢谢,是的,理想情况下,如果有一种方法可以使用natural framework的ConfigurationManager,并且它可以将configSection转换为IConfiguration,那就太好了:我认为您可以使用自己的实现来实现IConfiguration接口,该实现将读到ConfigurationManager,但这是相当多的工作
using Microsoft.Extensions.Configuration;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var config = new ConfigurationBuilder().AddXmlFile("test.xml").Build();
var section = config.GetSection("mySettings");
MethodForIConfiguration(section); // iconfiguration parameter accepts iconfigurationsection item
var settingValue = section.GetValue<string>("setting1"); // equals "test"
}
private static void MethodForIConfiguration(IConfiguration configuration)
{
}
}
}
using Microsoft.Extensions.Configuration;
using System.IO;
using System.Linq;
using System.Xml.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var document = XDocument.Load("App.config");
var node = document.Root.Descendants().Where(x => x.Name.LocalName == "mySettings").FirstOrDefault();
var newDocument = new XDocument();
newDocument.Add(node);
using var ms = new MemoryStream();
newDocument.Save(ms);
ms.Position = 0;
var config = new ConfigurationBuilder().AddXmlStream(ms).Build();
var settingValue = config.GetValue<string>("setting1");
}
}
}