- это действительно рекомендуемый способ создания программного обеспечения с помощью Prism ???
Совсем нет, в этом анти-шаблон .
Рекомендация Prism состоит в том, чтобы разрешать службы с использованием контейнеров по мере необходимости.
На самом деле не только Prism, но в более общем плане рекомендуется позволить контейнеру разрешить зависимости.Конечно, это можно сделать, вызвав Resolve
вручную, но при этом вы потеряете все преимущества, ожидаемые от внедрения зависимостей.
Скорее, вы захотите перечислить зависимости как параметры конструктора и позволить контейнеру заполнитьсяих.Ваш код не должен зависеть от контейнера, за исключением самой точки входа ("корневого разрешения").Приложение должно содержать только один оператор Resolve
, который разрешает первый экземпляр.
Здесь вступает в игру Prism: в ваших PrismApplication.RegisterTypes
и IModule.RegisterTypes
вы настраиваете свой контейнер.Вы говорите ему, какой тип должен реализовывать какой интерфейс.Позже, когда требуются модели представлений, Prism (точнее, ViewModelLocator
) использует контейнер для разрешения моделей представлений, тем самым разрешая все зависимости.Нет никаких причин, чтобы какой-либо класс зависел от контейнера, фактически Prism вообще ничего не регистрирует для IContainerRegistry
.
Имейте в виду, что контейнер может не только внедрять одноэлементные сервисы, но итакже временные случаи или фабрики.А если вам нужны параметризованные фабрики, вы всегда можете вручную создавать и регистрировать сложные фабрики.
В дополнение к этому, я лично не буду работать для клиента с такой кодовой базой, какэто очевидное доказательство того, что их разработчики понятия не имеют, что они делают.