Я сейчас экспериментирую с хитрой инверсией Google контрольного контейнера. Ранее у меня были синглтоны практически для любой службы (базы данных, активной директории), которую использовало мое приложение. Теперь я реорганизовал код: все зависимости приведены в качестве параметров для конструкторов. Все идет нормально. Теперь самое сложное - это графический интерфейс пользователя. Я сталкиваюсь с этой проблемой: у меня есть таблица (JTable) продуктов, завернутая в ProductFrame. Я даю зависимости как параметры (EditProductDialog).
@Inject
public ProductFrame(EditProductDialog editProductDialog) {
// ...
}
// ...
@Inject
public EditProductDialog(DBProductController productController, Product product) {
// ...
}
Проблема в том, что guice не может знать, какой продукт я выбрал в таблице, поэтому он не может знать, что вводить в EditProductDialog.
Внедрение зависимостей является довольно вирусным (если я изменяю один класс для использования внедрения зависимостей, мне также нужно изменить все другие классы, с которыми он взаимодействует), поэтому мой вопрос заключается в том, должен ли я непосредственно создавать экземпляр EditProductDialog? Но тогда мне придется вручную передать DBProductController в EditProductDialog, и мне также нужно будет передать его в ProductFrame, и все это сводится к тому, чтобы вообще не использовать внедрение зависимостей.
Или мой дизайн несовершенен, и из-за этого я не могу адаптировать проект к внедрению зависимости?
Приведите несколько примеров того, как вы использовали внедрение зависимостей с графическим интерфейсом пользователя.
Все примеры, найденные в Интернете, являются действительно простыми примерами, когда вы используете некоторые службы (в основном, базы данных) с внедрением зависимостей.