Krav: Forretningslogikken er kompleks og krever tilpasning, og for slik logikk kan bakgrunnen i en separat DLL-assembler dynamisk oppdatere samlingen og kjøre den nyeste logikken.
.NET Core støtter ikke dynamisk opprettelse og avlasting av AppDomains slik som .NET Framework, så det har aldri vært en god måte å hotloade plugins på, men den gode nyheten er at .NET Core har støttet Collectible Assembly siden 3.0, og vi kan lage en gjenvinnbar AssemblyLoadContext som vi kan bruke til å laste og tømme assemblies.
AssemblyLoadContext-klassen:Innloggingen med hyperkoblingen er synlig.
Først, lag en ny konsoll og tre biblioteker, nemlig:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、KlasseBibliotek2, blant annet arver ClassLibrary1- og ClassLibrary2-bibliotekene IWorker-grensesnittet i ClassLibraryStandard og implementerer Run-metoden.
ClassLibraryStandard-kode:
ClassLibrary1-kode:
ClassLibrary2-kode:
ConsoleApp6-konsollkoden er som følger:
Konsollen åpner Run-metoden med 3 tråder i DLL-pluginen som kontinuerlig kjører dynamisk, og bruker log4net for å registrere resultatene, og kjører det deretter i konsollenErstatt DLL-en med det nyeste biblioteket etter 3 sekunder。
Etter å ha kjørt konsollen i 1 sekund eller 5 sekunder, blir samlingen av den nåværende AssemblyLoadContext-instansen utdata, som er det lastede DLL-biblioteket.
Som vist nedenfor:
Du kan se at programmet ikke har noen unormal utdata, og det finnes ingen situasjon der pluginen ikke kan finnes under kjøringen. Grunnen til at log4net registrerer utførelsesresultatene er fordi konsollen er blokkert, og for å sikre at de 3 trådene kan kjøres kontinuerlig, brukes log4net til å registrere utførelsesresultatene, som vist i figuren nedenfor:
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Start avinstallasjon 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - AssemblyLoadContext_Unloading 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 2024-06-28 14:24:36,606 INFO 13 RollingFile - 1 ... 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,607 INFO 13 RollingFile - 1 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Avinstaller fullført 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 ... 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,607 INFO 13 RollingFile - 1 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,607 INFO 13 RollingFile - 1 2024-06-28 14:24:36,607 INFO 12 RollingFile - 1 2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,607 INFO 13 RollingFile - 2 2024-06-28 14:24:36,607 INFO 12 RollingFile - 2 Festet config.xml konfigurasjon:
(Slutt)
|