Jaka jest różnica między menedżerem WebConfigurationManager a menedżerem konfiguracji?

103

Jaka jest różnica między WebConfigurationManageri ConfigurationManager?

Kiedy powinienem używać jednego nad drugim?

AKTUALIZACJA

Właśnie spojrzałem na WebConfigurationManageriz jakiegoś powodu nie możesz uzyskać dostępu do parametrów połączenia, tak jak robisz to w ConfigurationManager(jak tablica). Czy ktoś może mi powiedzieć, dlaczego stwardnienie rozsiane zrobiło to w ten sposób? Wydaje się, że uzyskanie potrzebnych parametrów połączenia przy użyciu pliku WebConfigurationManager.

ZAKTUALIZOWANY PONOWNIE z CAVEAT!

Jeśli nie masz odwołania do System.Configurationprzestrzeni nazw dodanej do projektu, program Visual Studio wyświetli błąd podczas próby uzyskania dostępu do WebConfigurationManager.ConnectionStringstablicy like an!

John Bubriski
źródło
1
Nie sądzę, aby to „zastrzeżenie” było bardzo trafne. Używam konfiguracji system.web.configuration dla parametrów połączenia bez potrzeby konfiguracji system.configuration
sclarson

Odpowiedzi:

96

WebConfigurationManger wie, jak radzić sobie z dziedziczeniem konfiguracji w aplikacji internetowej. Jak wiesz, w jednej aplikacji może znajdować się kilka plików web.config - jeden w katalogu głównym witryny i dowolna liczba w podkatalogach. Możesz przekazać ścieżkę do metody GetSection (), aby uzyskać możliwą nadpisaną konfigurację.

Gdybyśmy spojrzeli na WebConfigurationManager z Reflector, to wszystko jest jasne:

public static object GetSection(string sectionName)
{
    ...
    return ConfigurationManager.GetSection(sectionName);
}

public static object GetSection(string sectionName, string path)
{
    ...
    return HttpConfigurationSystem.GetSection(sectionName, path);
}
XOR
źródło
26

WebConfigurationManager jest stworzony specjalnie dla aplikacji ASP.NET.

WebConfigurationManager zapewnia dodatkowe metody ładowania plików konfiguracyjnych mających zastosowanie do aplikacji sieci Web.

ConfigurationManager udostępnia również metody ładowania plików konfiguracyjnych odpowiednich dla aplikacji „.exe”.

Proponuję przyjrzeć się WebConfigurationManager i sprawdzić, czy zapewnia on coś, czego po prostu nie możesz zrobić z ConfigurationManager i zamiast tego użyć go, w przeciwnym razie użycie ConfigurationManager znacznie ułatwi płynne korzystanie z kodu między aplikacjami internetowymi i desktopowymi.

Konstantin Tarkus
źródło
4

Chociaż WebConfigurationManager znajduje się w zestawie System.Web, zwracane przez niego połączenie ConnectionStringSettingsCollection znajduje się w System.Configuration.

Jeśli otrzymujesz błąd

Nie można zastosować indeksowania z [] do wyrażenia typu „System.Configuration.ConnectionStringSettingsCollection”

próbując uzyskać dostęp do indeksu tablicy ...

WebConfigurationManager.ConnectionStrings["Name"].ConnectionString

upewnij się, że masz odwołanie do zestawu System.Configuration

WDuffy
źródło
3

Nie jestem pewien, co masz na myśli, mówiąc o parametrach połączenia.

Wywołanie WebConfigurationManager.ConnectionStrings zwraca System.Configuration.ConnectionStringSettingsCollection, który jest taki sam, jak w przypadku wywołania ConfigurationManager.ConnectionStrings .

W przeciwnym razie, jak mówi XOR, jest zaprojektowany do obsługi wielu hierarchicznych plików web.config, łącząc je zgodnie z wymaganiami podczas poruszania się po folderach w aplikacji.

Zhaph - Ben Duguid
źródło