2012-01-16 16 views
6

Mam aplikacji WPF pulpitu za pomocą Prism 4, moim inicjującego Mam następujący kod:Jak ograniczyć pryzmat 4, aby załadować tylko specjalne podpisane moduły?

protected override IModuleCatalog CreateModuleCatalog() 
{ 
    var filepath = Assembly.GetExecutingAssembly().Location; 
    var path = Path.GetDirectoryName(filepath); 
    System.IO.Directory.SetCurrentDirectory(path); 
    path = Path.Combine(path, "Modules"); 
    var moduleCatalog = new DirectoryModuleCatalog() { ModulePath = path }; 
    return moduleCatalog; 
} 

powyższy kod mówi pryzmat załadować wszystkie .dlls od „[moja aplikacja root] \ Modules” ścieżkę i sprawdź, czy dana klasa zaimplementowała moduł. Chciałbym ograniczyć proces ładowania tylko do bibliotek DLL, które zostały podpisane za pomocą specjalnego klucza, aby uniemożliwić programistom wstrzyknięcie modułu w moją aplikację. proszę o poradę, jeśli podążam niewłaściwą drogą do takiego problemu.

Odpowiedz

2

Jesteś na dobrej drodze, jednak musisz pójść trochę dalej. KatalogModuleCatalog jest zaprojektowany do ładowania dowolnych typów w określonym katalogu, które implementują interfejs IModule, jak widzieliście. Jeśli chcesz ograniczyć moduły, które są ładowane dalej (na przykład do złożeń podpisanych za pomocą określonego klucza), musisz utworzyć niestandardowy katalog modułów (prawdopodobnie pochodzący z DirectoryModuleCatalog) i zastąpić metodę Initialize. Inicjalizacja polega na tym, że katalog modułów zbada katalog i załaduje kolekcję obiektów ModuleInfo, które zawierają informacje o dowolnych modułach w katalogu. Przez przesłonięcie tej metody można badać złożenia w katalogu i ładować moduły tylko z zestawów z odpowiednią sygnaturą. W metodzie Initialize należy wypełnić właściwość Modules modułem modułów modułów zawartych w poprawnych złożeniach.

Następnie, w powyższym kodzie, zamiast tworzyć nowy DirectoryModuleCatalog(), należy utworzyć niestandardowy katalog modułów.

Należy pamiętać, że w zależności od sposobu sprawdzania podpisu zespołu, możliwe jest wgranie zespołu do pamięci (nawet jeśli żadne moduły nie są dostępne w katalogu). W takim przypadku możesz chcieć zweryfikować złożenia w osobnej domenie AppDomain, która może następnie zostać wyładowana (co spowoduje rozładowanie niepodpisanych złożeń z pamięci).

+1

To bardzo pomogło, dzięki Brian. –

Powiązane problemy