У меня есть приложение Swing, которое я хотел бы преобразовать из спагетти в использование инъекций зависимостей в Guice. Использование Guice для предоставления сервисов, таких как конфигурация и очереди задач, работает отлично, но сейчас я начинаю работать с графическим интерфейсом приложения и не знаю, что делать дальше.
Приложение в основном JFrame
с кучей вкладок в JTabbedPane
. Каждая из вкладок представляет собой отдельный подкласс JPanel
, который выделяет различные компоненты и нуждается в услугах для выполнения действий при нажатии определенных кнопок.
В текущем приложении это выглядит примерно так:
@Inject
public MainFrame(SomeService service, Executor ex, Configuration config) {
tabsPane = new JTabbedPane();
// Create the panels for each tab and add them to the tabbedpane
somePanel = new SomeTabPanel(service, ex, config);
tabsPane.addTab("Panel 1", somePanel);
someOtherPanel = new SomeOtherTabPanel(service, ex, config);
tabsPane.addTab("Panel 2", someOtherPanel);
... do more stuff
}
Очевидно, что это не совсем соответствует лучшим методикам DI. Я не хочу иметь @Inject
вкладки, потому что это даст мне конструктор с десятками параметров. Я хочу использовать Guice для внедрения необходимых зависимостей в любые нужные мне объекты табуляции без необходимости передавать все эти зависимости конструкторам вкладок.
Все зависимости для объектов вкладок - это сервисы, о которых мой Module
знает, поэтому в основном все, что я думаю Я хочу сделать, это спросить у Guice необходимые объекты и сконструировать их для меня. ,