Не уверен, что мне здесь не хватает, но я не могу получить значения из моего appsettings.json в моем основном приложении .net. У меня есть appsettings.json как:
{
"AppSettings": {
"Version": "One"
}
}
Запускать:
public class Startup
{
private IConfigurationRoot _configuration;
public Startup(IHostingEnvironment env)
{
_configuration = new ConfigurationBuilder()
}
public void ConfigureServices(IServiceCollection services)
{
//Here I setup to read appsettings
services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
}
}
Модель:
public class AppSettings
{
public string Version{ get; set; }
}
контроллер:
public class HomeController : Controller
{
private readonly AppSettings _mySettings;
public HomeController(IOptions<AppSettings> settings)
{
//This is always null
_mySettings = settings.Value;
}
}
_mySettings
всегда ноль. Есть ли что-то, что мне здесь не хватает?
c#
asp.net-core
asp.net-core-mvc
мужчина
источник
источник
Ответы:
Программа и класс запуска
.NET Core 2.x
Вам не нужно нового
IConfiguration
вStartup
конструкторе. Его реализация будет внедрена системой DI..NET Core 1.x
Вы должны сказать,
Startup
чтобы загрузить файлы appsettings.Получение ценностей
Есть много способов получить значение, которое вы настраиваете в настройках приложения:
ConfigurationBuilder.GetValue<T>
Допустим, ваша
appsettings.json
внешность выглядит так:Простой способ
Вы можете вставить всю конфигурацию в конструктор вашего контроллера / класса (через
IConfiguration
) и получить желаемое значение с помощью указанного ключа:Варианты шаблона
ConfigurationBuilder.GetValue<T>
Отлично работает , если вам нужно только одно или два значения из настроек приложения. Но если вы хотите получить несколько значений из настроек приложения или не хотите жестко кодировать эти ключевые строки в нескольких местах, может быть проще использовать шаблон параметров . Шаблон параметров использует классы для представления иерархии / структуры.Чтобы использовать параметры шаблона:
IOptions<T>
в конструктор контроллера / класса, для которого вы хотите получить значения1. Определите классы конфигурации для представления структуры
Вы можете определить классы со свойствами, которые должны точно соответствовать ключам в настройках вашего приложения. Имя класса не обязательно должно совпадать с именем раздела в настройках приложения:
2. Зарегистрируйте экземпляр конфигурации
И тогда вам нужно зарегистрировать этот экземпляр конфигурации
ConfigureServices()
при запуске:3. Внедрить IOptions
И наконец, в контроллере / классе, который вы хотите получить значения, вам нужно ввести
IOptions<AppIdentitySettings>
через конструктор:источник
IOptionsSnapshot<T>
вместоIOptions<T>
. Вы можете взглянуть на эту статью: offer.solutions/blog/articles/2017/02/17/… . Хотя у меня не было возможности попробовать это самому.Просто создайте файл AnyName.cs и вставьте следующий код.
Необходимо заменить имя файла YouAppSettingFile.json на имя вашего файла.
Ваш файл .json должен выглядеть ниже.
Теперь вы можете использовать его.
Не забудьте добавить ссылку в вашем классе, где вы хотите использовать.
Код для получения значения.
источник
Добавление к ответу Дэвида Ляна для Core 2.0 -
appsettings.json
Файлы связаны сASPNETCORE_ENVIRONMENT
переменной.ASPNETCORE_ENVIRONMENT
может быть установлен на любое значение, но три значения поддерживаются структурой:Development
,Staging
иProduction
. ЕслиASPNETCORE_ENVIRONMENT
не установлен, по умолчанию будетProduction
.Для этих трех значений этих appsettings.ASPNETCORE_ENVIRONMENT.json поддерживаются файлы из коробки -
appsettings.Staging.json
,appsettings.Development.json
иappsettings.Production.json
Вышеупомянутые три приложения, устанавливающие файлы json, могут использоваться для настройки нескольких сред.
Пример -
appsettings.Staging.json
Используйте
Configuration["config_var"]
для получения любого значения конфигурации.источник
appsettings.json
+appsettings.{env.EnvironmentName}.json
. Поэтому утверждение о том, что ASP.NET Core загружает только файлы appsettings.json для разработчиков, промежуточных и производственных приложений, в настоящее время неверно.ASPNETCORE_ENVIRONMENT
каждый раз устанавливать переменную Windows ? В .Net 4 все было намного проще. Эти фанатики JSON всеЯ думаю, самый простой способ - это DI. Пример достижения в контроллере.
источник
services.AddSingleton(Configuration);
, теперь это работаетВ конструкторе класса Startup вы можете получить доступ к appsettings.json и многим другим параметрам, используя внедренный объект IConfiguration:
Конструктор Startup.cs
Содержимое appsettings.json
источник
источник
В моем случае это было просто, как использование метода Bind () для объекта Configuration. А затем добавить объект как синглтон в DI.
Объект Instruction может быть настолько сложным, насколько вы хотите.
источник
Для ASP.NET Core 3.1 вы можете следовать этому руководству:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
При создании нового проекта ASP.NET Core 3.1 у вас будет следующая строка конфигурации
Program.cs
:Это позволяет следующее:
Это означает, что вы можете вводить
IConfiguration
и извлекать значения с помощью строкового ключа, даже вложенные значения. подобноIConfiguration["Parent:Child"];
Пример:
appsettings.json
WeatherForecast.cs
источник
IConfiguration["Parent:Child"]
синтаксисе?Я думаю, что лучший вариант это:
Создайте класс модели в качестве схемы конфигурации
Зарегистрируйтесь в DI: services.Configure (Configuration.GetSection ("democonfig"));
Получите значения как объект модели из DI в вашем контроллере:
источник
От Asp.net core 2.2 и выше вы можете написать код, как показано ниже:
Шаг 1. Создайте файл класса AppSettings.
Этот файл содержит несколько методов, помогающих получить значение по ключу из файла appsettings.json. Выглядит как код ниже:
Шаг 2. Начальная настройка для объекта AppSettings
Нам нужно объявить и загрузить файл appsettings.json при запуске приложения, а также загрузить информацию о конфигурации для объекта AppSettings. Мы сделаем эту работу в конструкторе файла Startup.cs. Пожалуйста, обратите внимание на строку
AppSettings.Instance.SetConfiguration(Configuration);
Хорошо, теперь у меня есть файл appsettings.json с некоторыми ключами, как показано ниже:
Шаг 3. Чтение значения конфигурации из действия
Я делаю демонстрацию в контроллере Home, как показано ниже:
И ниже результат:
Нажмите, чтобы увидеть результат
Для получения дополнительной информации вы можете обратиться к статье get value из appsettings.json в ядре asp.net для более детального кода.
источник
Все просто: в appsettings.json
В файле .cs:
источник