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.