Microsoft.Extensions.Configuration究竟如何依赖于ASP.NET Core?

Vse*_*lod 11 c# .net-core asp.net-core asp.net-core-configuration

ASP.NET Core是否实现了IConfiguration对配置值的访问?

很可能是我的问题出现了,因为我不明白ASP.NET核心到底是什么.好吧,我知道它是一个Web框架,不确定,但看起来它是.NET中的命名空间,或者一个包...我知道在php中,框架可以是一组类(命名空间)或编译库,作为扩展提供,所以我在.NET中假设一个类似的方法.

最初,我并不打算围绕ASP.NET Core.我需要为我的简单控制台C#应用程序(VS Code和.NET Core)存储一些配置.我发现了许多主题(例如这里:如何从控制台应用程序中的config.json读取值)来读取JSON(推荐)配置.鉴于此,我添加了三个必要的块包:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.FileExtensions;
using Microsoft.Extensions.Configuration.Json;
Run Code Online (Sandbox Code Playgroud)

我需要用:

new ConfigurationBuilder()          
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json").Build();
Run Code Online (Sandbox Code Playgroud)

这将返回实现IConfigurationRoot/ IConfigurationinterface 的对象.但是所有示例都是在ASP.NET Core上下文中给出的.我有一个非常简单的应用程序,我还不需要任何ASP.NET功能.

所以我试图在IConfigurationRoot没有ASP.NET的情况下访问.生成的对象存储来自配置文件的值,但没有其接口的所有方法来访问它们.

如何在.NET命名空间的上下文中解释这一点?ASP.NET Core是否实现了从IConfiguration类似访问值的方法Get<T>()

如果Microsoft.Extensions.Configuration是一部分或严重依赖Microsoft.AspNetCore.App,为什么它在不同的命名空间?

如果我添加ASP.NET Core(NuGet包和命名空间),它会是一种矫枉过正吗?

也许我应该使用soemthing而不是ConfigurationBuilder阅读JSON?

pok*_*oke 29

Microsoft.Extensions.ConfigurationMicrosoft.Extensions命名空间中的其他包(例如OptionsDependencyInjection)一样,是作为ASP.NET Core框架的一部分创建的包.ASP.NET Core及其所有相关软件包的构建方式是以非常模块化的方式,因此所有库都可以在ASP.NET Core上下文中使用,或者不使用.

您必须像库一样理解这些包.它们包含在ASP.NET Core中,因为框架构建它们之上,但如果您不需要ASP.NET Core Web框架,您仍然可以单独使用这些库,而无需提及ASP.NET Core.这就是他们居住在Microsoft.Extensions命名空间内的原因,而不是Microsoft.AspNetCore:它们是完全独立的项目.当然,这些包的开发是由ASP.NET Core团队完成的,而ASP.NET Core的设计决策确实会影响这些扩展包的演变方式.但团队对这些包非常小心,因此一般使用不会受到影响.

所有人都说,你如何使用这些包?就像任何其他库一样,您只需添加一个NuGet引用即可.由于Microsoft.Extensions.Configuration基础库,不附带任何工具来加载文件,你还需要Microsoft.Extensions.Configuration.Json,如果要加载JSON文件.

但那时它真的很直接:

var configuration = new ConfigurationBuilder()
    .AddJsonFile("config.json")
    .Build();

// retrieve configuration values
Console.WriteLine(configuration["foo"]); // bar
Console.WriteLine(configuration["baz:bar"]); // qux
Run Code Online (Sandbox Code Playgroud)

对于此示例,config.json看起来像这样:

{
    "foo": "bar",
    "baz": {
        "bar": "qux"
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以像这样加载配置.请务必查看文档.它可能与ASP.NET Core内部使用的配置有关,但基础概念仍然适用(例如配置路径的外观绑定的工作原理).

最后,请注意,这实际上只是用于配置.从JSON加载数据只是您可以使用的众多配置源之一Microsoft.Extensions.Configuration.但无论您将使用哪种提供程序,最终都会得到具有部分和关键路径概念的相同配置格式.

如果您在查看如何解析JSON的同时来到包中,那么您可能正在查看错误的工具.如果要解析JSON以检索正确的数据结构,就像使用JSON作为序列化数据的方法一样,那么您应该看一些不同的东西.解析JSON(序列化)的最常见解决方案是使用Json.NET,它是一种非常强大且灵活的工具,可以处理任何类型的JSON数据.

  • 哇。这是全面(快速)的答案。非常感谢。我可能会使用Json.NET,因为我只需要存储要从excel wb中读取的工作表名称和表标题行号。尽管如此,我仍将尝试使“ Microsoft.Extensions.Configuration”工作以达到学习目的。 (2认同)
  • 优秀答案! (2认同)