Predstavljajte si scenarij, kjer naš sistem storitev zagotavlja vrsto funkcionalnih storitev, v prihodnosti pa bo dodanih več novih funkcionalnih storitev, funkcionalne storitve pa bo morda treba spremeniti ali odstraniti. Pogosta osnovna zahteva za tak servisni sistem je, da delovanja servisnega sistema ni mogoče ustaviti pri dodajanju/odstranjevanju/posodabljanju funkcionalnih storitev. Običajno je mogoče "vtičnike za vročo menjavo" zelo enostavno implementirati tako, da se vsaka storitev kapsulira v vtičnik dll, vendar postane problem "vroča zamenjava" ("dinamična zamenjava") vtičnikov. Razlog je, da ko odstranimo vtičnik Dll iz servisnega sistema, sistem dejansko še vedno hrani osnovno referenco na dll, in če poskušate izbrisati ali prepisati dll, Windows prikaže sporočilo, kot je "dll se uporablja".
Kako torej rešiti ta problem? Mislim, da obstajata vsaj dve možnosti:
(1) Uporabite AppDomain. Nalaganje vtičnikov v novi AppDomain in nato odstranitev AppDomain čisto odstrani dll-je vtičnika iz servisnega sistema. Slabost tega pristopa je, da morate upravljati veliko AppDomainov (ker imate toliko funkcionalnih storitev), komunikacija med AppDomaini pa poteka na daljavo, kar našemu sistemu povzroča veliko nepotrebnih težav. Če vas zanima, lahko poskusite tudi to možnost, jaz pa raje uporabljam drugo.
(2) Kopirajte vtičnik Dll v pomnilnik in nato naložite Dll v pomnilnik. Na ta način se DLL-ji na trdem disku lahko po želji prepišejo ali izbrišejo. Prej smo vtičnik Dll nalagali neposredno s trdega diska, takole:
Zdaj moramo obrniti novo smer:
To rešuje problem "dinamične zamenjave" vtičnikov.
|