2016-02-23 2 views
1

В моем Startup.cs файла У меня есть следующий:не умеет читать настройки из файла JSON в Startup.cs

public Startup(IHostingEnvironment env) 
{ 
    // Set up configuration sources. 
    var builder = new ConfigurationBuilder() 
     .AddJsonFile("appsettings.json") 
     .AddEnvironmentVariables(); 
    Configuration = builder.Build(); 
} 

public IConfigurationRoot Configuration { get; set; } 

// This method gets called by the runtime. Use this method to add services to the container. 
public void ConfigureServices(IServiceCollection services) 
{ 

    var fooValue = Configuration.Get("foo"); 
    // Add framework services. 
    services.AddMvc(); 
} 

И в моем файле appsettings.json У меня есть { "foo": "bar" }

Позже в моем классе запуска у меня есть:

public void ConfigureServices(IServiceCollection services) 
{ 

    var fooValue = Configuration.Get("foo"); 
    // Add framework services. 
    services.AddMvc(); 
} 

Я стараюсь смотреть на значение изменения fooValue в моем Locals отладчик, установив контрольную точку на ней (VS2015 с расширениями ASP.NET 5), но я получаю следующее сообщение об ошибке, когда я ступаю на него:

исключение типа «System.InvalidOperationException» произошло в Microsoft .Extensions.Configuration.Binder.dll, но не обрабатывался в коде пользователя

Дополнительная информация: Невозможно создать экземпляр типа «System.String», поскольку отсутствует открытый конструктор без параметров.

Я после MVA Configuring Data at 18m 53s

Я пытался создать config.json файл, как в примере, но шаблон, кажется, изменились, и это не поможет в любом случае.

Должен ли я иметь возможность получать информацию о конфигурации из .json-файлов, подобных этому?

+0

Вот аналогичный вопрос с рабочим примером: http://stackoverflow.com/a/32044957/390421 (который включает загрузку json-данных и доступ к ней через вызов config.Get().) – MartijnK

+1

Кроме того, вы можете найти больше примеров о том, как получить доступ к вложенным свойствам json здесь: http://whereslou.com/2014/05/23/asp-net-vnext-moving-parts-iconfiguration/ – MartijnK

ответ

2

Просто чтобы получить полный ответ здесь. Вы делали все правильно, но перегрузка CongigurationBinder.Get, который вы выбрали, ожидает имя раздела конфигурации вместо ключа.

public static T Get<T>(this IConfiguration configuration, T defaultValue) 

Но есть другая перегрузка вы можете использовать:

public static T Get<T>(this IConfiguration configuration, string key) 

Так что ваш код должен выглядеть следующим образом:

public void ConfigureServices(IServiceCollection services) 
{  
    var fooValue = Configuration.Get<string>("foo"); 
    // Add framework services. 
    services.AddMvc(); 
} 

Я думаю, что документация не так ясна, поэтому я в основном используя рефлектор или исходный код GitHub, чтобы узнать, что фактически делает API. Вот ссылка на public repository для этого пакета.

+0

Спасибо. Долгосрочная цель для меня заключается в том, чтобы лучше понять публичные примеры. – Louis

2

Чтобы ответить на ваш вопрос: да вы можете захватить конфигурацию из .json файлов, просто измените

Configuration.Get("foo"); 

к:

Configuration.Get<string>("foo"); 

и вы сможете прочитать его ,

Смежные вопросы