ASP.NET 核心是否实现了对配置值的IConfiguration
访问?
很可能我的问题出现是因为我不明白 Core 到底是什么 ASP.NET。好吧,我知道它是一个 Web 框架,不确定,但看起来它是 .NET 中的一个命名空间,或者一个包......我知道在 php 中,框架可以是一组类(命名空间(或作为扩展提供的编译库,因此我假设在 .NET 中使用类似的方法。
最初,我还没有打算把我的头缠绕在 ASP.NET 核心上。我需要为我的简单控制台 C# 应用程序(VS Code 和 .NET Core(存储一些配置。我找到了很多主题(例如:如何在控制台应用程序中从config.json读取值(来读取JSON(推荐(配置。鉴于此,我添加了三个必要的金块包:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.FileExtensions;
using Microsoft.Extensions.Configuration.Json;
我需要使用:
new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
这将返回实现IConfigurationRoot
/IConfiguration
接口的对象。但所有的例子都是在 ASP.NET 核心背景下给出的。我有一个非常简单的应用程序,我还不需要 ASP.NET 任何功能。
所以我试图在没有 ASP.NET 的情况下访问IConfigurationRoot
。生成的对象存储配置文件中的值,但没有其接口的所有方法来访问它们。
如何在 .NET 命名空间的上下文中解释这一点?ASP.NET Core 是否实现了从IConfiguration
(如Get<T>()
(访问值的方法?
如果Microsoft.Extensions.Configuration
是Microsoft.AspNetCore.App
的一部分或严重依赖于,为什么它在不同的命名空间中?
如果我添加 ASP.NET 核心(NuGet 包和命名空间(,会不会矫枉过正?
也许我应该使用ConfigurationBuilder
以外的 soemthing 来阅读 JSON?
Microsoft.Extensions.Configuration
与Microsoft.Extensions
命名空间中的其他包(例如 Options,或 DependencyInjection(一样,是作为 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 核心团队完成的,ASP.NET 核心的设计决策确实会影响这些扩展包的发展方式;但是团队对这些软件包非常小心,以免影响一般使用。
综上所述,您如何使用这些软件包?就像任何其他库一样,只需添加对它的 NuGet 引用。由于Microsoft.Extensions.Configuration
是基础库,它没有任何加载文件的工具,因此如果要加载JSON文件,还需要Microsoft.Extensions.Configuration.Json
。
但接下来它真的很直截了当:
var configuration = new ConfigurationBuilder()
.AddJsonFile("config.json")
.Build();
// retrieve configuration values
Console.WriteLine(configuration["foo"]); // bar
Console.WriteLine(configuration["baz:bar"]); // qux
对于此示例,config.json
如下所示:
{
"foo": "bar",
"baz": {
"bar": "qux"
}
}
因此,您可以像这样加载配置。不过,请务必仍然检查文档。它可能与 Core 内部使用的配置有关 ASP.NET 但基本概念仍然适用(例如,配置路径的外观或绑定的工作原理(。
最后,请注意,这实际上仅用于配置。从 JSON 加载数据只是您可以使用Microsoft.Extensions.Configuration
的众多配置源之一。但是,无论您将使用哪个提供程序,您最终都会得到具有部分和关键路径概念的相同配置格式。
如果您在查看如何解析 JSON 时来到包,那么很可能您正在寻找错误的工具。如果要解析 JSON 以检索正确的数据结构,就像使用 JSON 作为序列化数据的方式一样,那么您应该查看其他内容。解析JSON(也是序列化(最常见的解决方案是使用 Json.NET,这是一个非常强大和灵活的工具来处理任何类型的JSON数据。