Как вы управляете зависимостями с инверсией управления? - PullRequest
0 голосов
/ 07 декабря 2018

Я небольшой разработчик программного обеспечения, который создает приложение на основе плагинов.Каждый плагин представляет собой свою собственную сборку и ссылается на основную сборку следующим образом:

  • Плагин 1 ссылается на пакеты nuget и Application Core.dll
  • Плагин 2 ссылается на пакеты nuget и Application Core.dll

Во время выполнения основная сборка загружает все сборки в свою текущую папку и перечисляет их для подключаемых модулей.Прямо сейчас все мои проекты создаются в одной папке.Мне нравится это делать, потому что я могу просто нажать F5, чтобы запустить свое решение в Visual Studio.Это также хорошо, потому что я могу просто отключить проект в решении, если я не хочу запускать этот плагин.

Для некоторых плагинов теперь требуется определенная версия пакета nuget.Например:

  • Для плагина 1 требуется System.Net.Http 4.0.0 или выше
  • Для плагина 1 требуется System.Net.Http 4.3.4 или выше

Когда я собираю свой проект, иногда сначала собирается плагин 2, что означает, что плагин 1 или 2 перезапишет system.net.http 4.3.4 с версией 4.0.0.

Какой для меня лучший способчтобы избежать перезаписи DLL более старыми версиями, но при этом иметь привычную простоту разработки?

1 Ответ

0 голосов
/ 07 декабря 2018

Одним из решений, которое вам может не понравиться, является прекращение использования динамической загрузки.Если ваше приложение использует плагин 1 и плагин 2, сделайте из них NuGet или ссылки на проекты и дайте системе сборки выяснить минимальные версии всех распространенных для вас пакетов.Вам также больше не нужно будет изменять все пути вывода сборки, чтобы получить легкий опыт разработки.Просто используйте функцию-флаги / конфигурацию, чтобы позволить клиентам выбирать нужные функции, а не добавлять / удалять библиотеки.

Другой вариант - сохранить каждый плагин в своих собственных папках со всеми их собственными зависимостями и основнымиПрограмма загружает плагины в разных доменах приложений.это работает только на .NET Framework, но не на .NET Core, но имеет то преимущество, что у плагина, имеющего сбой, меньше шансов разбить все приложение.программа может обнаружить сбойный плагин / домен приложения и выгрузить его.Но домены приложений почти как использование разных процессов, и у вас возникают проблемы с междоменной связью (все должно быть сериализуемым)

...