代码之家  ›  专栏  ›  技术社区  ›  Vsevolod

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

  •  5
  • Vsevolod  · 技术社区  · 6 年前

    ASP.NET核心是否实现 IConfiguration 访问配置值?

    很可能我的问题是因为我不知道ASP.NET核心到底是什么。嗯,我知道这是一个Web框架,不确定,但看起来它是.NET中的一个命名空间,或者是一个包…我知道在PHP中,框架可以是作为扩展提供的一组类(名称空间)或编译库,所以我假定在.NET中使用类似的方法。

    最初,我还没有打算把我的头绕在ASP.NET核心上。我需要为我的简单控制台C应用程序(vs代码和.NET核心)存储一些配置。我发现了很多主题(例如: How to read values from config.json in Console Application )读取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 / i配置 接口。但所有示例都是在ASP.NET核心上下文中给出的。我有一个非常简单的应用程序,我还不需要任何ASP.NET功能。

    所以我试着进入 i配置根目录 没有ASP.NET。结果对象存储来自配置文件的值,但没有其接口的所有方法来访问这些值。

    如何在.NET命名空间的上下文中解释这一点?ASP.NET核心是否实现从中访问值的方法 i配置 喜欢 Get<T>() ?

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

    如果我添加ASP.NET核心(nuget包和名称空间),这会是一个过度杀伤力吗?

    也许我应该用其他的方法 ConfigurationBuilder 读JSON?

    1 回复  |  直到 6 年前
        1
  •  14
  •   poke    6 年前

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

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

    所以大家都说,你怎么用这些包裹?就像其他库一样,只需添加一个nuget引用即可。自从 Microsoft.Extension.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
    

    在这个例子中, config.json 看起来像这样:

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

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

    最后,请注意,这实际上只是用于配置。从JSON加载数据只是您可以使用的许多配置源之一。 Microsoft.Extensions.配置 。但是,无论您将使用什么提供者,您最终都将使用相同的配置格式,该格式具有节和关键路径的概念。

    如果您在查看如何解析JSON时访问了该包,那么很可能您看到的是错误的工具。如果您希望通过解析JSON来检索适当的数据结构,就像使用JSON作为序列化数据的方法一样,那么您应该考虑一些不同的东西。解析JSON(序列化)最常见的解决方案是使用 Json.NET 这是一个非常强大和灵活的工具来处理任何类型的JSON数据。

    推荐文章