2010-01-06 12 views
5

Mam witryny ASP.NET MVC, który składa się z 3 projektów w roztworze:Jak mam przechowywać ustawienia witryny ASP.NET MVC?

model domeny (Class Library - Trzyma LINQ repo)
DomainServices (Class Library - Trzyma logiki biznesowej)
WebUI (Witryna ASP.NET MVC)

Potrzebuję miejsca na przechowywanie zestawu ustawień naszej witryny, które można skonfigurować za pomocą XML.

Jaki powinien być projekt? Czy ktoś ma przykład tego, jak ładują, a następnie uzyskują dostęp do swoich ustawień w różnych projektach?

Czy raz załaduję plik XML w konstruktorze klasy C# zawierającej właściwości dla wszystkich moich ustawień?

Czy ktoś może podać mi przykłady i wskazówki dotyczące przechowywania ustawień w pliku XML do użycia w rozwiązaniu wieloprojektowym?

Odpowiedz

8

Ustawienia są zwykle przechowywane w pliku web.config. Wszystkie zestawy mają dostęp do tych ustawień.

ConfigurationManager.AppSettings["key"] 

Trzeba dodać odwołanie do System.configuration.dll

1

Chciałbym przechowywać go w nowej usłudze z interfejsem.

Co mam zrobić, to klasa ma wszystkie właściwości/ustawienia. Zarządzałby również plikiem XML.

Kontener Inversion of Control pozwoliłby na ich wstrzyknięcie za pomocą wstrzyknięcia zależności w inne klasy.

+0

byłem rozważa jej klasę statyczną rozważa Nie sądzę, będę potrzebował wiele jego wystąpień. Nie jestem tego pewien. – Rinndar

+0

Właściwy kontener IoC domyślnie skonstruuje tylko jeden. –

2

zgadzam się z Mathias, aby użyć domyślnego sposobu oferowanych przez ramy. Jednak można (powinno IMHO) jeszcze zrobić jakieś klasy otoki, prawdopodobnie za pomocą interfejsu dla ułatwienia szydząc z testów jednostkowych, np:

class MyAppSettings 
{ 
    public int SomeSetting 
    { 
     get 
     { 
     return Convert.ToInt32(ConfigurationManager.AppSettings["SomeSetting"]); 
     } 
    } 
} 
0

Definiowanie wspólnej działce w bibliotece klasy do przechowywania ustawień aplikacji (instancja Specialized.NameValueCollection). Następnie w logice serwisu ustaw tę nową właściwość na swoje ustawienia ASP.NET z web.config w Application_Start sub z global.asax.

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    ' Code that runs on application startup 
    DomainModel.Common.AppSettings = ConfigurationManager.AppSettings 
End Sub 

W ten sposób można uzyskać dostęp do ustawień z projektów biblioteki klas.

7

Zamiast używać AppSettings, który jest po prostu zbiorem par wartości kluczowych, należy rozważyć zdefiniowania własnej struktury Konfiguracja za ConfigurationSection lub IConfigurationSectionHandler

W ten sposób można uzyskać wszystkie bezpieczeństwa klasy otoki, i nie zaśmiecać swoje AppSettings (i jest ładnie określone gdzieś do użytku).

Jeszcze lepiej, zdefiniuj swój własny schemat XML i użyj XmlSerialization/Deserialization, aby zapisać ten plik poza web.config, nasłuchując zmian na nim (powiązanie z pamięcią podręczną, cokolwiek).

Jeśli robisz to w ten sposób, nie musisz modyfikować pliku web.config, aby uzyskać zmiany i dlatego nie musisz ponownie uruchamiać aplikacji WWW tracącej sesję/pamięć podręczną.

Nie, że dobrze napisana bezpaństwowców aplikacji internetowych powinien dbać o utratę sesji/cache - ale zawsze jest ktoś ... :)