Я большой поклонник использования приложений Unity для .NET, чтобы модули кода и зависимостей «управлялись» в больших кодовых базах. Я использовал его в течение многих лет с помощью .NET, выгружая сборки в каталог программы основной программы и переконфигурируя конфигурационный файл IoC (обычно файл .exe.config), вводя новое поведение в программу без необходимости повторной компиляции основная программа.Универсальные приложения с IoC: Управление зависимостями/изоляция
Однако я начал свой набег на создание универсальных приложений для Windows Store и, что более важно, Windows IoT - однако, поскольку эти приложения «упакованы» во время компиляции, мне трудно понять, как лучше продолжать работу это.
Один из возможных вариантов заключается в компиляции «модулей» (библиотек классов PCL/Universal) и их включении (и их зависимостях) в качестве файлов «Содержимое» в универсальном приложении, а затем использовать отражение для загрузки типов из этих сборок во время запуск программы посредством отражения.
Другим вариантом будет включение всех модулей и их зависимостей в ссылки на проекты основной программы перед компиляцией, но с использованием «инъекции зависимостей бедных людей для жесткого кодирования регистраций и разрешений», но для меня это действительно неправильно. в идеале хотел бы сохранить разделение зависимостей, если это вообще возможно?
Любые идеи ...?
PS. Я никак не привязан к Unity, если есть еще одна библиотека IoC, которая делает это лучше на этой платформе, тогда прекрасно, но Unity - это то, что я уже знаю и люблю!
Итак, как вы собираетесь распространять эти сборки в универсальном приложении, сохраняя изоляцию? – tommed
@tommed Определите как ваш интерфейс, так и реализацию вместе в указанной сборке и подключите ее к конфигурации, определенной в этой сборке, и только ссылку на интерфейс из основного приложения. Я бы поставил под вопрос необходимость разделить интерфейс и реализацию, но если вы это сделаете, вам нужно будет определить интерфейс в промежуточной сборке. – moarboilerplate
@tommed Изоляция возникает из-за возможности реализовать базовую реализацию, пока интерфейс остается прежним. – moarboilerplate