Požadavky: Obchodní logika je složitá a vyžaduje úpravy, a pro takovou logiku může pozadí v samostatné DLL sestavě dynamicky aktualizovat sestavu a vykonávat nejnovější logiku.
.NET Core nepodporuje dynamické vytváření a odstraňování AppDomainů jako .NET Framework, takže nikdy neexistoval dobrý způsob, jak hotload pluginy, ale dobrou zprávou je, že .NET Core podporuje Collectible Assembly od verze 3.0 a můžeme vytvořit obnovitelný AssemblyLoadContext, který můžeme použít k načítání a odstraňování assemblerů.
Třída AssemblyLoadContext:Přihlášení k hypertextovému odkazu je viditelné.
Nejprve vytvořte novou konzoli a tři knihovny, konkrétně:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, mezi nimiž knihovny ClassLibrary1 a ClassLibrary2 dědí rozhraní IWorker v ClassLibraryStandard a implementují metodu Run.
ClassLibraryStandard:
Kód ClassLibrary1:
Kód ClassLibrary2:
Kód konzole ConsoleApp6 je následující:
Konzole otevírá metodu Run se 3 vlákny v DLL pluginu, který se neustále dynamicky spouští, a používá log4net k zaznamenání výstupních výsledků, a poté jej spustí v konzoliNahraďte DLL nejnovější knihovnou po 3 sekundách。
Po spuštění konzole po dobu 1 sekundy nebo 5 sekund je výstupem kolekce aktuální instance AssemblyLoadContext, což je načtená knihovna DLL.
Jak je uvedeno níže:
Vidíte, že program nemá žádný abnormální výstup a neexistuje situace, kdy by plugin nebyl během spuštění nalezen. Důvodem, proč log4net zaznamenává výsledky vykonání, je to, že konzole je zablokovaná, a aby bylo zajištěno, že tři vlákna mohou být nepřetržitě, používá se log4net k jejich záznamu, jak je znázorněno na obrázku níže:
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Začněte odinstalovat 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 - Odinstalace dokončena 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 Připojená config.xml konfigurace:
(Konec)
|