2016-11-08 8 views
1

В ASP.Net Core можно вводить значения конфигурации в класс, используя IOptions<T>.ASP.NET Core для инъекций

Так что, если у меня есть следующий appsettings.json конфигурации:

{ 
    "CustomSection": { 
    "Foo": "Bar" 
    }, 
    "RootUrl": "http://localhost:12345/" 
} 

можно впрыснуть IOptions<CustomSection> в мой конструктор (предполагая, что я определил CustomSection класс) и прочитать Foo свойство.

Как я могу ввести параметр RootUrl в свой конструктор или это не поддерживается?

+0

вы не можете построить класс 'RootUrl' – Daniel

+0

Вы должны [не вводить IOptions в ваши конструкторы] (https://github.com/simpleinjector/SimpleInjector/issues/143#issuecomment-155029876). – Steven

ответ

1

Из документов Using options and configuration objects что является не представляется возможным:

Узор опции позволяет использовать пользовательские опции классы представляют собой группу взаимосвязанных параметров. Класс должен иметь общедоступное свойство read-write для каждого параметра и конструктор, который не принимает никаких параметров (например, конструктор по умолчанию), чтобы использоваться в качестве класса параметров.

Это означает, что вам необходимо сгенерировать класс для чтения его значений конфигурации. Но в вашем примере RootUrl не может быть построен через класс.

4

Создать класс, как показано ниже

public class AppSettings { 
    public string RootUrl{ get; set; } 
} 

Вводит его в свой startup.cs, как показано ниже.

public void ConfigureServices(IServiceCollection services) 
{ 
    services.Configure<AppSettings>(Configuration.GetSection("AppSettings")); 
} 

И используйте его в своем контроллере, как показано ниже.

public CustomerController(IOptions<AppSettings> appSettings) 
{ 
    [variable] = appSettings.Value; 
} 

Дайте мне знать, если это сработает для вас.

+0

Нет, это не работает, потому что в файле конфигурации нет раздела «AppSettings». –

+0

@KaiG Вы можете просто использовать RootUrl, попробуйте. – jkyadav

+0

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

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

  • Нет связанных вопросов^_^