Изисквания: Бизнес логиката е сложна и изисква персонализация, и за такава логика, в отделна DLL асемблер, фонът може динамично да обновява асемблера и да изпълнява последната логика.
.NET Core не поддържа динамично създаване и премахване на AppDomains като .NET Framework, така че никога не е имало добър начин за hotload плъгини, но добрата новина е, че .NET Core поддържа Collectible Assembly от версия 3.0 и можем да създадем възстановим AssemblyLoadContext, който можем да използваме за зареждане и разтоварване на асембли.
Клас AssemblyLoadContext:Входът към хиперлинк е видим.
Първо, създайте нова конзола и три библиотеки, а именно:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, сред които библиотеките ClassLibrary1 и ClassLibrary2 наследяват интерфейса IWorker в ClassLibraryStandard и реализират метода Run.
ClassLibraryСтандартен код:
Код на ClassLibrary1:
Код на ClassLibrary2:
Кодът на конзолата ConsoleApp6 е следният:
Конзолата отваря метода Run на 3 нишки в DLL плъгина, който постоянно се изпълнява динамично, използва log4net за запис на изходните резултати, след което ги стартира в конзолатаСмени DLL с най-новата библиотека след 3 секунди。
След като конзолата работи за 1 секунда или 5 секунди, се извежда колекцията от текущата инстанция AssemblyLoadContext, която е заредената DLL библиотека.
Както е показано по-долу:
Виждате, че програмата няма ненормален изход и няма ситуация, в която плъгинът да не бъде намерен по време на изпълнението. Причината, поради която log4net записва резултатите от изпълнението, е че конзолата е блокирана и за да се гарантира, че трите нишки могат да се изпълняват непрекъснато, log4net се използва за записване на резултатите от изпълнението, както е показано на фигурата по-долу:
2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Започнете деинсталиране 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 11 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 11 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 10 RollingFile - AssemblyLoadContext_Unloading 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 13 RollingFile - 1 ... 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 12 RollingFile - 1 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 12 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 10 RollingFile - Деинсталиране завършено 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 12 RollingFile - 1 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 12 RollingFile - 1 ... 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 12 RollingFile - 1 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 12 RollingFile - 1 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 13 RollingFile - 1 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 12 RollingFile - 1 2024-06-28 14:24:36,606 ИНФОРМАЦИЯ 11 RollingFile - 1 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 13 RollingFile - 2 2024-06-28 14:24:36,607 ИНФОРМАЦИЯ 12 RollingFile - 2 Прикачени config.xml конфигурация:
(Край)
|