Wyobraźmy sobie sytuację, w której nasz system usług dostarcza serię usług funkcjonalnych, a w przyszłości zostaną dodane kolejne nowe usługi funkcjonalne, a usługi funkcjonalne mogą wymagać zmian lub usunięcia. Powszechnym podstawowym wyżem takiego systemu usług jest to, że jego działanie nie może być zatrzymane podczas dodawania/usuwania/aktualizacji usług funkcjonalnych. Zazwyczaj "wtyczki do wymiany na gorąco" można bardzo łatwo zaimplementować, kapsułując każdą usługę w wtyczkę dll, ale problemem staje się "wymiana na gorąco" ("dynamiczna zastępowa") wtyczek. Powód jest taki, że gdy odinstalujemy wtyczkę Dll z systemu usługowego, system serwisowy nadal przechowuje odniesienie do dll, a jeśli spróbujesz usunąć lub nadpisać dll, Windows wyświetla komunikat typu "dll jest używane".
Jak więc rozwiązać ten problem? Myślę, że są co najmniej dwie opcje:
(1) Używaj AppDomain. Załadowanie wtyczek w nowej AppDomain, a następnie odinstalowanie AppDomain czysto usuwa wtyczki dlls z systemu usługowego. Minusem tego podejścia jest to, że musisz zarządzać wieloma AppDomainami (ponieważ masz tak wiele funkcjonalnych usług), a komunikacja między AppDomainami odbywa się zdalnie, co wprowadza wiele niepotrzebnych problemów do naszego systemu. Jeśli jesteś zainteresowany, możesz też spróbować tej opcji, a ja wolę korzystać z drugiej.
(2) Skopiuj wtyczkę Dll w pamięci, a następnie załaduj Dll w pamięci. W ten sposób DLL na dysku twardym mogą być nadpisywane lub usuwane według uznania. Wcześniej ładowaliśmy wtyczkę Dll bezpośrednio z dysku twardego, w ten sposób:
Teraz musimy zmienić sytuację:
To rozwiązuje problem "dynamicznej zastępowania" wtyczek.
|