- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
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.Configuration
是 Microsoft.AspNetCore.App
的一部分或严重依赖于 ConfigurationBuilder
,为什么它在不同的命名空间中?
如果我添加 ASP.NET Core(NuGet 包和命名空间),会不会有点矫枉过正?
也许我应该使用 ojit_code 以外的东西来读取 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 核心。这就是为什么它们位于 Microsoft.Extensions
命名空间而不是 Microsoft.AspNetCore
中的原因:它们是完全独立的项目。当然,这些包的开发是由 ASP.NET Core 团队完成的,ASP.NET Core 的设计决策确实会影响这些扩展包的演变方式;但团队对这些包非常小心,因此不会影响一般使用。
综上所述,您如何使用这些包?就像任何其他库一样,您只需向它添加一个 NuGet 引用。由于 Microsoft.Extensions.Configuration
是 base 库,它没有任何加载文件的功能,您还需要 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 like 或 how 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/
我有一个问题,我想通过其他程序打开 chrome://extensions/页面,例如 cmd.exe 或其他程序。 我们知道,如果我们用chrome.exe打开一个网站,我们可以在cmd.exe中执
当您编写manifest.json 文件时,您必须为内容脚本指定匹配。 http 和 https 工作正常,但如果我尝试包含 chrome://*/* 或其任何变体,我会得到一个我尝试对我的匹配使用无
我真的很困惑我想制作一个可以扩展用户的Google日历的Chrome扩展程序,我应该在Google API下注册哪种程序? 它是Web App吗?但是我不打算让服务器托管任何东西,因为Chrome扩展
我想在带有chrome-extension://URL的iframe上运行内容脚本。我在我的manifest.json文件中添加了一行代码,该行是从http://code.google.com/chr
目前,我正在使用记事本和 chrome 控制台的组合对我的 google-chrome-extensions 进行编码。我 100% 确信有更好的方法来对这些扩展进行编程。人们使用什么环境? 最佳答案
在编写 manifest.json 文件时,必须指定 matches用于您的内容脚本。 http和 https工作正常,但如果我尝试包含 chrome://*/*或它的任何变体,我收到一个错误,提示我
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve
在发布更新后,我正在尝试为我的 Chrome 扩展程序的用户创造流畅的体验。 我在更新应用程序时重新注入(inject)了我的内容脚本,即使用户继续在扩展更新后未刷新的页面上使用我的扩展,我的功能仍然
将扩展程序从 Chrome 移植到 FF 遵循本教程(在 Chrome 中运行良好):http://www.codingscripts.com/check-whether-user-has-a-chr
我正在将 google-chrome 扩展改编成 firefox。 这个扩展相当简单,它只是重新加载当前浏览器窗口并在其中放置一个特定的字符串(它用于在 Odoo 上激活调试状态)。 但是,当我在 m
我正在尝试在普通 HTML 页面(非扩展)中链接到 chrome://extensions。但是单击链接不会执行任何操作: chrome://extensions 右键单击并在新选项卡中打开只会打开
为 String 编写扩展名很容易,但问题是它总是显示为 "MyString".ExtensionMethod() 如果这样写: public static class Extensions{
如题。我正在运行 Joomla 2.5。 “扩展”下拉菜单中唯一可见的项目是: 模块经理 插件管理器 模板管理器 语言经理 编辑:我这样做是为了安装模板,按照此页面上的说明:http://docs.j
基本上我希望文件名以扩展名列表中的扩展名结尾。这是我在 python 中的代码。我已经将一些示例文件名作为列表,如下所示: extensions = ['.mp3','.m4a','.wma'] fi
在 background.html : chrome.tabs.query({active:true, currentWindow:true},function(tabs){ chrome.tab
我有一个可能被用户禁用的 chrome 扩展。在这种情况下,我想创建一个指向 chrome://extensions 菜单的链接。它会是这样的 Chrome extensions 这是不允许的:不允许
我查看了 Google 文档,但不知道如何更改其类型。 这是我加载时遇到的错误。 尝试安装此扩展时出现警告:“browser_action”仅允许用于扩展程序,这是一个旧版打包应用程序。 这是我的ma
我有一个正在构建的 chrome 扩展,它使用 OAuth 访问许多 API。我没有将我的消费者 secret 存储在扩展程序中,而是重定向到获取 token 的服务器,然后重定向回我的扩展程序中的页
我有一个正在构建的 chrome 扩展,它使用 OAuth 访问许多 API。我没有将我的消费者 secret 存储在扩展程序中,而是重定向到获取 token 的服务器,然后重定向回我的扩展程序中的页
这个问题已经有答案了: Why would a developer place a forward slash at the start of each relative path? (4 个回答)
我是一名优秀的程序员,十分优秀!