Microsoft.Extensions.Configuration如何完全依赖ASP.NET Core?

时间:2018-09-03 21:47:30

标签: c# asp.net-core .net-core asp.net-core-configuration

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

最有可能出现我的问题,因为我不清楚ASP.NET Core到底是什么。好吧,我知道这是一个Web框架,不确定,但是看起来它是.NET中的名称空间或包...在php中,我知道框架可以是一组类(名称空间)或编译后的库,作为扩展提供,所以我认为在.NET中类似的方法。

最初,我还没有打算把头放在ASP.NET Core上。我需要为我的简单控制台C#应用程序(VS Code和.NET Core)存储一些配置。我发现很多主题(例如: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 / IConfiguration接口的对象。但是所有示例都在ASP.NET Core上下文中给出。我有一个非常简单的应用程序,并且不需要任何ASP.NET功能。

因此,我尝试在没有ASP.NET的情况下访问IConfigurationRoot。结果对象存储了配置文件中的值,但没有其接口中的所有方法都可以访问它们。

如何在.NET名称空间的上下文中对此进行解释? ASP.NET Core是否实现方法来访问IConfiguration之类的Get<T>()中的值?

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

如果我添加ASP.NET Core(NuGet程序包和名称空间),那会不会过分杀人?

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

1 个答案:

答案 0 :(得分:15)

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.Extension.Configuration base 库,没有任何用于加载文件的工具,因此,如果要加载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"
    }
}

因此,您可以像这样加载配置。不过,请务必检查the documentation。可能与ASP.NET Core内部使用的配置有关,但基本概念仍然适用(例如how configuration paths look likehow binding works)。

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

如果您是在查看如何解析JSON时来到该程序包,则可能是您使用的工具错误。如果您想解析JSON来检索适当的数据结构,就像将JSON用作序列化数据的方式时所使用的那样,那么您应该看一下不同的东西。解析JSON(也进行序列化)的最常见解决方案是使用Json.NET,它是处理任何类型的JSON数据的功能非常强大且灵活的工具。