Požiadavky: Obchodná logika je zložitá a vyžaduje prispôsobenie, a pre takúto logiku môže v samostatnej DLL zostave pozadie dynamicky aktualizovať zostavu a vykonávať najnovšiu logiku.
.NET Core nepodporuje dynamické vytváranie a odstraňovanie AppDomainov ako .NET Framework, takže nikdy neexistoval dobrý spôsob, ako hotloadovať pluginy, ale dobrou správou je, že .NET Core podporuje Collectible Assembly od verzie 3.0 a môžeme vytvoriť obnoviteľný AssemblyLoadContext, ktorý môžeme použiť na načítanie a odkladanie assemblelov.
Trieda AssemblyLoadContext:Prihlásenie na hypertextový odkaz je viditeľné.
Najprv vytvorte novú konzolu a tri knižnice, a to:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, medzi ktorými knižnice ClassLibrary1 a ClassLibrary2 preberajú rozhranie IWorker v ClassLibraryStandard a implementujú metódu Run.
ClassLibraryStandard kód:
Kód ClassLibrary1:
ClassLibrary2 kód:
Kód konzoly ConsoleApp6 je nasledovný:
Konzola otvára metódu Run s 3 vláknami v DLL plugine, ktorý sa neustále dynamicky vykonáva, a používa log4net na zaznamenanie výstupných výsledkov, potom ju spustí v konzoleNahraďte DLL najnovšou knižnicou po 3 sekundách。
Po spustení konzoly na 1 sekundu alebo 5 sekúnd sa vygeneruje kolekcia aktuálnej inštancie AssemblyLoadContext, čo je načítaná knižnica DLL.
Ako je uvedené nižšie:
Vidíte, že program nemá žiadny abnormálny výstup a neexistuje situácia, kde by sa plugin nedal nájsť počas vykonávania. Dôvod, prečo log4net zaznamenáva výsledky vykonávania, je ten, že konzola je zablokovaná, a aby sa zabezpečilo, že 3 vlákna môžu vykonávať nepretržite, log4net sa používa na zaznamenanie výsledkov vykonávania, ako je znázornené na obrázku nižšie:
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Začnite odinštalovať 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 - Odinštalovanie dokončené 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 Pripojená config.xml konfigurácia:
(Koniec)
|