ASP.NET MVC 6 – AppSettings

W ostatnim wpisie wspomniałem, że Web.Config został usunięty i zastąpiony project.json. Pokazałem, jak dodać referencje czy skonfigurować wersję framework’a. Web.Config jednak zawierał jeszcze jedną ważną sekcję – AppSettings.

ASP.NET 5 wspiera różne typy plików konfiguracyjnych – JSON, INI oraz XML. Możemy wszystkie je dodać jednocześnie do solucji i nie spowoduje to konfliktów. Nie jesteśmy ograniczeni tylko do jednego typu czy pojedynczego pliku konfiguracyjnego. Dla testów, dodajmy 3 pliki, każdy w innym formacie:

JSON.json:

{ "jsontimeout": "1000" }

INI.ini:

initimeout=100

XML.xml:

<root> <xmltimeout>1000</xmltimeout> </root>

Następnie w Startup.cs musimy wskazać powyższe pliki za pomocą:

configuration.AddJsonFile("JSON.json"); configuration.AddIniFile("INI.ini"); configuration.AddXmlFile("XML.xml");

Zmienna configuration jest typu  IConfiguration.  Teraz w dowolnym miejscu, za pomocą również IConfiguration możemy:

string xmlValue = Configuration["xmltimeout"]; string initimeout = Configuration["initimeout"]; string jsontimeout = Configuration["jsontimeout"];

Jak widzimy, wersja ASP.NET 5 daje nam większe możliwości jeśli chodzi o przechowywanie wartości konfiguracyjnych. Nie jesteśmy ograniczeni wyłącznie do Web.config i formatu XML.

Wartości mogą być duplikowane, ale zawsze klucz zarejestrowany później nadpisuje wszystkie starsze.

Ponadto, możliwe jest przechowywanie całych struktur, a nie tylko typów prostych. Załóżmy, że w xml.xml mamy:

<Person> <FirstName>Piotr</FirstName> <LastName>Zielinski</LastName> </Person>

W C# z kolei, tworzymy reprezentację za pomocą klasy:

public class Person { public string FirstName { get; set; } public string LastName { get; set; } }

Wartość możemy przeczytać za pomocą metody Configuration.Get lub wstrzyknąć ją:

services.Configure<Person>(Configuration);

Po wstrzyknięciu, w każdym kontrolerze będziemy mieli dostęp do powyższych danych:

public class HomeController : Controller { private readonly IOptions<Person> _person; public HomeController(IOptions<Person> person) { _person = person; } }

Myślę, że to dobra zmiana, aczkolwiek konwersja aplikacji ze starszych wersji do MVC 6 zdecydowanie jest trudna i czasochłonna.

Leave a Reply

Your email address will not be published.