.net core 从框架应用程序创建和传递IConfiguration

.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

在我的.NETFramework4.7.2应用程序中,我正在使用一个需要配置为IConfiguration对象的库。我知道配置的模式,并且在App.config中包含了xml元素。但现在我在解析app.config的这一部分并将其转换为IConfiguration时遇到了问题。 如果我将xml元素放在一个单独的xml文件中,我知道我可以这样做:

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");
        }
    }
}