Недавно я узнал об основах DI Guice и Ninject и хотел использовать их в некоторых из моих новых проектов.
В то время как я знаком с концепциями внедрения общих зависимостей и знаю, как использовать эти фреймворки для построения графиков объектов, я изо всех сил стараюсь применять IoC, когда речь заходит о динамическом поведении приложений.
Рассмотрим следующий пример:
- При запуске приложения будет показано главное окно.
- Когда пользователь нажимает на основную панель, открывается контекстное меню.
- В зависимости от выбора пользователя пользовательский элемент новый будет создан и показан в позиции мыши.
- Если пользователь в конце концов решит закрыть приложение, появится окно подтверждения и - после подтверждения - основное окно будет закрыто.
Пока легко подключить главное окно View к Presenter/ViewModel, а затем привязать его к логике домена, я не понимаю, как чисто (в смысле IoC) достичь следующих задач:
- Динамически создавать конкретное управление пользовательским интерфейсом (например,
IGreenBoxView
,IRedImageView
< -JConcreteGreenBoxView
,JConcreteRedImageView
) без использования какого-либо шаблона локатора службы (например, запрашивая IoC снова)- В зависимости от этого создайте экземпляр новой модели, презентатора и просмотра
- Similary, создайте новое конкретное диалоговое окно, например.
JOptionPane
во время выполнения
Я видел некоторые решения с использованием абстрактных фабрик, но, честно говоря, не полностью их понимал. Похоже, что такое решение привело бы к тому, что некоторые внутренние (вид домена, ведущего домена,...) внутренние типы будут встраиваться в корень построения и, вместе с тем, во весь мир.
Итак - как мне это сделать?