Как именно Microsoft.Extensions.Configuration зависит от ASP.NET Core? - PullRequest
0 голосов
/ 04 сентября 2018

Осуществляет ли ASP.NET Core IConfiguration доступ к значениям конфигурации?

Скорее всего, мой вопрос возник, потому что я не понимаю, что такое ASP.NET Core. Ну, я знаю, что это веб-фреймворк, Не уверен, но похоже, что это пространство имен в .NET или пакет ... Я знаю, в php, фреймворк может быть набором классов (пространство имен) или скомпилированной библиотекой, которая предоставляется в качестве расширения, поэтому я предполагаю, что аналогичный подход в .NET.

Изначально я еще не собирался оборачиваться вокруг ASP.NET Core. Мне нужно было сохранить некоторые настройки для моего простого консольного приложения 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 Core. У меня действительно простое приложение, и мне пока не нужны какие-либо функциональные возможности ASP.NET.

Итак, я попытался получить доступ к IConfigurationRoot без ASP.NET. Полученный объект хранит значения из файла конфигурации, но не имеет всех методов своего интерфейса для доступа к ним.

Как объяснить это в контексте пространств имен .NET? Осуществляет ли ASP.NET Core методы доступа к значениям из IConfiguration, например Get<T>()?

Если Microsoft.Extensions.Configuration является частью или сильно зависит от Microsoft.AspNetCore.App, почему он находится в другом пространстве имен?

Если я добавлю ASP.NET Core (пакет NuGet и пространства имен), это будет излишним?

Может быть, я должен использовать что-то кроме ConfigurationBuilder для чтения JSON?

1 Ответ

0 голосов
/ 04 сентября 2018

Microsoft.Extensions.Configuration, как и другие пакеты в пространстве имен Microsoft.Extensions (например, Опции или DependencyInjection ), являются пакетами, которые были созданы как часть базовая структура ASP.NET. Однако способ построения ASP.NET Core и всех связанных с ним пакетов очень модульный, поэтому все библиотеки можно использовать в контексте ASP.NET Core или без него.

Вы должны понимать эти пакеты как библиотеки. Они включены в ASP.NET Core, поскольку фреймворк строит поверх них , но если вам не требуется веб-фреймворк ASP.NET Core, вы все равно можете использовать эти библиотеки отдельно без какого-либо упоминания о ASP. NET Core. Именно поэтому они живут внутри пространства имен 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"
    }
}

Так что вы можете просто загрузить конфигурацию следующим образом. Обязательно проверьте документацию . Возможно, речь идет о конфигурации, используемой внутри ASP.NET Core, но все еще применяются базовые концепции (например, , как выглядят пути конфигурации , или , как работает привязка ).

Наконец, обратите внимание, что это действительно просто для конфигурации. Загрузка данных из JSON - это только один из многих источников конфигурации, которые вы можете использовать с Microsoft.Extensions.Configuration. Но независимо от того, какого провайдера вы будете использовать, вы получите тот же формат конфигурации, который имеет понятия разделов и основных путей.

Если вы пришли к пакету, когда искали, как анализировать JSON, то, скорее всего, вы ищете не тот инструмент. Если вы хотите проанализировать JSON для получения правильной структуры данных, как вы использовали бы при использовании JSON в качестве способа сериализации данных, вам следует взглянуть на что-то другое. Наиболее распространенное решение для синтаксического анализа JSON (также сериализации) использует Json.NET , который является очень мощным и гибким инструментом для работы с любыми JSON-данными.

...