Követelmények: Az üzleti logika összetett és testreszabást igényel, és ehhez a logikához egy külön DLL összeállításban a háttér dinamikusan frissítheti az összeállítást és végrehajthatja a legújabb logikát.
A .NET Core nem támogatja az AppDomain-ek dinamikus létrehozását és eltávolítását, mint a .NET Framework, így sosem volt jó módja a bővítmények hotload-ának, de a jó hír, hogy a .NET Core 3.0 óta támogatja a Collectible Assembly-t, és létrehozhatunk egy visszafoglalható AssemblyLoadContext-et, amivel összeszerelőket tölthetünk és kirakunk.
AssemblyLoadContext osztály:A hiperlink bejelentkezés látható.
Először hozz létre egy új konzolt és három könyvtárat, nevezetesen:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, amelyek közül a ClassLibrary1 és ClassLibrary2 könyvtárak öröklik az IWorker interfészt a ClassLibraryStandardban, és megvalósítják a Run metódust.
ClassLibrarySzabványkód:
ClassLibrary1 kód:
ClassLibrary2 kód:
A ConsoleApp6 konzolkód a következő:
A konzol megnyitja a 3 szálból álló Run módszert a DLL pluginben, amely folyamatosan dinamikusan fut, és a log4net segítségével rögzíti az eredményeket, majd futtatja a konzolonCseréld le a DLL-t a legújabb könyvtárra 3 másodperc múlva。
Miután a konzolt 1 másodpercig vagy 5 másodpercig futtatták, a jelenlegi AssemblyLoadContext példány gyűjteménye jön ki, ami a betöltött DLL könyvtár.
Ahogy az alábbiakban látható:
Láthatod, hogy a programnak nincs rendellenes kimenete, és nincs olyan helyzet, amikor a plugin ne található meg a végrehajtás során. Azért rögzíti a log4net a végrehajtási eredményeket, mert a konzol le van tiltva, és annak érdekében, hogy a három szál folyamatosan működhessen, a log4net-et használják a végrehajtási eredmények rögzítésére, ahogy az alábbi ábrán látható:
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Kezdj el eltávolítani 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 - Eltávolítás befejezve 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 Csatolt config.xml konfiguráció:
(Vége)
|