gpt4 book ai didi

c# - Microsoft.Extensions.Configuration 究竟是如何依赖 ASP.NET Core 的?

转载 作者:太空狗 更新时间:2023-10-29 19:51:26 25 4
gpt4 key购买 nike

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

我的问题很可能是因为我不明白 ASP.NET Core 究竟是什么。好吧,我知道它是一个网络框架,不确定,但看起来它是 .NET 中的一个命名空间,或者一个包......我知道在 php 中,一个框架可以是一组类(一个命名空间)或编译的库作为扩展提供,因此我假设在 .NET 中有类似的方法。

最初,我并不打算全神贯注于 ASP.NET Core。我需要为我的简单控制台 C# 应用程序(VS 代码和 .NET Core)存储一些配置。我发现了很多阅读 JSON(推荐)配置的主题(例如:How to read values from config.json in Console Application)。鉴于此,我添加了三个必要的 block 包:

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 接口(interface)的对象。但是所有示例都是在 ASP.NET Core 上下文中给出的。我有一个非常简单的应用程序,我还不需要任何 ASP.NET 功能。

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

如何在 .NET 命名空间的上下文中对此进行解释? ASP.NET Core 是否实现了像 IConfiguration 一样从 Get<T>() 访问值的方法?

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

如果我添加 ASP.NET Core(NuGet 包和命名空间),会不会有点矫枉过正?

也许我应该使用 ojit_code 以外的东西来读取 JSON?

最佳答案

Microsoft.Extensions.Configuration ,与 Microsoft.Extensions 命名空间中的其他包(例如 OptionsDependencyInjection )一样,是作为 ASP.NET Core 框架的一部分创建的包。然而,ASP.NET Core 及其所有相关包的构建方式是一种非常模块化的方式,因此所有库都可以在 ASP.NET Core 上下文中使用,也可以在没有上下文的情况下使用。

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

综上所述,您如何使用这些包?就像任何其他库一样,您只需向它添加一个 NuGet 引用。由于 Microsoft.Extensions.Configurationbase 库,它没有任何加载文件的功能,您还需要 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

对于此示例,config.json 如下所示:

{
"foo": "bar",
"baz": {
"bar": "qux"
}
}

所以你可以像这样加载配置。一定要检查 the documentation尽管。它可能与 ASP.NET Core 内部使用的配置有关,但底层概念仍然适用(例如 how configuration paths look likehow binding works)。

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

如果您是在寻找如何解析 JSON 的过程中来到这个包的,那么您很可能看错了工具。如果你想解析 JSON 以检索正确的数据结构,就像你在使用 JSON 作为序列化数据的方式时使用的那样,那么你应该看看不同的东西。解析 JSON(也序列化)的最常见解决方案是使用 Json.NET这是一个非常强大和灵活的工具,可以处理任何类型的 JSON 数据。

关于c# - Microsoft.Extensions.Configuration 究竟是如何依赖 ASP.NET Core 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com