2016-11-01 3 views
2

Было внесено множество изменений в «параметры» ASP.NET Core. Я использую последнюю версию, и ни один из учебников и образцов больше не работает.ASP.NET Core сильно типизировал параметры из appsettings.json

Чтобы упростить это, я создал новое веб-приложение ASP.NET Core с использованием шаблонов Visual Studio.

Мои appsettings.json содержит:

"MyConfig": { 
    "Foo": "Bar" 
} 

Мои сильно типизированных конфигурации объекта:

public class MyConfig { 
    public string Foo; 
} 

Мои Startup.ConfigureServices содержит:

services.AddOptions(); 
services.Configure<MyConfig>(Configuration.GetSection("MyConfig")); 
//services.Configure<MyConfig>(opts => Configuration.GetSection("MyConfig").Bind(opts)); // I also tried this 

Мои HomeController содержит:

public class HomeController : Controller { 

    private readonly MyConfig _myConfig; 

    public HomeController(IOptions<MyConfig> myConfig) { 
    _myConfig = myConfig.Value; 
    } 

    public IActionResult Index() { 
    return Content(_myConfig.Foo);  // Foo is null 
    } 

} 

И мой project.json содержит:

"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
"Microsoft.Extensions.Configuration.Json": "1.0.0", 
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0", 
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0", 
//"Microsoft.Extensions.Configuration.Binder": "1.0.0", // I also tried this 

Но MyConfig.Foo объект всегда null.

+5

Я делаю очень похожи, и это работает для меня. Я предлагаю попробовать добавить get; set; на ваше свойство Foo, т. е. общедоступную строку Foo {get; set;}, поскольку это одно отличие, которое я вижу в вашем коде –

+0

не использовать rc2, поскольку другой человек прокомментировал, он работает в 1.0.0 –

+0

Ох да, это не определено как собственность, как Джо сказал – mybirthname

ответ

5

Я делаю очень похоже и работает для меня. Я предлагаю попробовать добавить get; set; на своем поле Foo, чтобы сделать его propertry, т.е.

public string Foo { get; set; } 

так как это одна разница я вижу в вашем коде

+0

Используете ли вы те же самые ссылки на project.json, что и я выше? В любом месте нет руководства. Я работаю на основе удаления всего, и если это не сбой, тогда все в порядке. – grokky

+1

Да, я использую то же самое, для IOptions вам определенно требуется Microsoft.Extensions.Options.ConfigurationExtensions, как у вас есть. если вы не используете секреты пользователя, вы можете удалить эту, переменные среды также являются необязательными, но могут быть полезны для производственного или лазурного развертывания. –

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