Zahteve: Poslovna logika je kompleksna in zahteva prilagoditev, za takšno logiko pa lahko v ločenem DLL sestavu ozadje dinamično posodablja sestavo in izvaja najnovejšo logiko.
.NET Core ne podpira dinamičnega ustvarjanja in odstranjevanja AppDomainov kot .NET Framework, zato nikoli ni bilo dobrega načina za hotload vtičnikov, a dobra novica je, da .NET Core podpira Collectible Assembly že od različice 3.0 in lahko ustvarimo obnovljiv AssemblyLoadContext, ki ga lahko uporabimo za nalaganje in razlaganje assemblev.
Razred AssemblyLoadContext:Prijava do hiperpovezave je vidna.
Najprej ustvarite novo konzolo in tri knjižnice, in sicer:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, med katerimi knjižnici ClassLibrary1 in ClassLibrary2 podedujeta vmesnik IWorker v ClassLibraryStandard in implementirata metodo Run.
ClassLibraryStandardna koda:
Koda ClassLibrary1:
Koda ClassLibrary2:
Koda konzole ConsoleApp6 je naslednja:
Konzola odpre metodo Run s tremi nitmi v DLL vtičniku, ki se nenehno dinamično izvaja, uporabi log4net za beleženje izhodnih rezultatov in ga nato zažene v konzoliZamenjaj DLL z najnovejšo knjižnico po 3 sekundah。
Po 1 sekundi ali 5 sekundah delovanja konzole se izpiše zbirka trenutne instance AssemblyLoadContext, ki je naložena DLL knjižnica.
Kot je prikazano spodaj:
Vidite lahko, da program nima nenavadnega izhoda in ni situacije, kjer vtičnika med izvajanjem ne bi bilo mogoče najti. Razlog, zakaj log4net beleži rezultate izvajanja, je v tem, da je konzola blokirana, in da bi zagotovili neprekinjeno izvajanje vseh treh niti, se log4net uporablja za beleženje rezultatov izvajanja, kot je prikazano na spodnji sliki:
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Začni odstranjevati 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 - Odstranitev končana 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 Priložena config.xml konfiguracija:
(Konec)
|