Vaatimukset: Liiketoimintalogiikka on monimutkainen ja vaatii räätälöintiä, ja tällaisessa logiikassa erillisessä DLL-kokoonpanossa tausta voi dynaamisesti päivittää assemblyn ja suorittaa viimeisimmän logiikan.
.NET Core ei tue dynaamista AppDomainien luomista ja purkamista kuten .NET Framework, joten ei ole koskaan ollut hyvää tapaa hotloadata plugineja, mutta hyvä uutinen on, että .NET Core on tukenut Collectible Assemblya vuodesta 3.0 lähtien, ja voimme luoda takaisin otettavan AssemblyLoadContextin, jota voimme käyttää assemblyjen lataamiseen ja purkamiseen.
AssemblyLoadContext-luokka:Hyperlinkin kirjautuminen on näkyvissä.
Luo ensin uusi konsoli ja kolme kirjastoa, nimittäin:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, joista ClassLibrary1- ja ClassLibrary2-kirjastot perivät IWorker-rajapinnan ClassLibraryStandardissa ja toteuttavat Run-metodin.
ClassLibraryStandardikoodi:
ClassLibrary1-koodi:
ClassLibrary2-koodi:
ConsoleApp6:n konsolikoodi on seuraava:
Konsoli avaa Run-metodin, jossa on 3 säikettä DLL-pluginissa, joka toimii jatkuvasti dynaamisesti, ja käyttää log4netiä tallentaakseen tulost, minkä jälkeen se ajaa ne konsolissaKorvaa DLL uusimpaan kirjastoon 3 sekunnin kuluttua。
Kun konsoli on ajettu 1 sekunnin tai 5 sekunnin ajan, nykyisen AssemblyLoadContext-instanssin kokoelma tulostuu, eli ladattu DLL-kirjasto.
Kuten alla on esitetty:
Näet, ettei ohjelmassa ole mitään poikkeavaa ulostuloa, eikä ole tilannetta, jossa pluginia ei löydettäisi suoritusprosessin aikana. Syynä siihen, miksi log4net tallentaa suoritustulokset, on se, että konsoli on estynyt, ja jotta kolme säikettä voivat suorittaa jatkuvasti, log4netiä käytetään suoritustulosten tallentamiseen, kuten alla olevassa kuvassa näkyy:
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Aloita poistaminen 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 - Poista asennus valmis 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 Liitetty config.xml kokoonpano:
(Loppu)
|