Įsivaizduokite scenarijų, kai mūsų paslaugų sistema teikia daugybę funkcinių paslaugų, o ateityje bus pridėta daugiau naujų funkcinių paslaugų, o funkcines paslaugas gali tekti keisti arba pašalinti. Bendras pagrindinis tokios paslaugų sistemos reikalavimas yra tai, kad paslaugų sistemos veikimas negali būti sustabdytas pridedant, pašalinant / atnaujinant funkcines paslaugas. Paprastai "karšto keitimo įskiepiai" gali būti labai lengvai įgyvendinami kiekvieną paslaugą į įskiepių DLL, tačiau "karštas pakeitimas" ("dinaminis pakeitimas") įskiepiai tampa problema. Priežastis ta, kad kai pašaliname papildinį DLL iš paslaugų sistemos, paslaugų sistema iš tikrųjų vis dar turi pagrindinę nuorodą į dll, o jei bandysite ištrinti arba perrašyti dll, "Windows" pateiks tokį pranešimą kaip "dll naudojamas".
Taigi, kaip išspręsti šią problemą? Manau, kad yra bent du variantai:
(1) Naudokite "AppDomain". Įkėlus papildinius į naują "AppDomain" ir pašalinus "AppDomain", įskiepiai švariai iškraunami iš paslaugų sistemos. Šio požiūrio trūkumas yra tas, kad turite valdyti daug "AppDomains" (nes turite tiek daug funkcinių paslaugų), o bendravimas tarp "AppDomains" vyksta nuotoliniu būdu, o tai sukelia daug nereikalingų galvos skausmų mūsų sistemai. Jei jus domina, taip pat galite išbandyti šią parinktį, o aš mieliau naudoju antrąją.
(2) Nukopijuokite įskiepį Dll į atmintį, tada įkelkite Dll į atmintį. Tokiu būdu standžiajame diske esančius DLL galima perrašyti arba ištrinti savo nuožiūra. Anksčiau įkėlėme įskiepį "Dll" tiesiai iš standžiojo disko, taip:
Dabar turime pasukti kampą:
Tai išsprendžia įskiepių "dinaminio pakeitimo" problemą.
|