Калитка - инициализировать внешний класс

id хотел бы инициализировать мой импортированный Client.class, который взаимодействует с серверной частью, в моем WicketApplication. Я знаю, что должен сделать это в моем WebApplication.class (в методе инициализации, верно?). Но как я могу получить этот экземпляр в своих классах Page.classes? Как я могу с ним общаться?

Спасибо за совет


person user1090145    schedule 11.01.2012    source источник


Ответы (2)


Вы можете получить текущее приложение, используя getApplication() или WebApplication.get(). Оттуда вы сможете сузить его тип до своей собственной реализации и вызвать метод получения для вашего атрибута Client.class. Имейте в виду, что приложение является общим объектом между всеми вашими пользователями, и ваш атрибут Client должен быть потокобезопасным, если вы не хотите, чтобы происходили неприятные вещи ...

person Cedric Gatay    schedule 12.01.2012
comment
Вы также можете создать статический метод в своем классе приложения, который выполняет преобразование за вас, т.е. MyApplication.get() вернет MyApplication type. - person biziclop; 12.01.2012

Наименее тесно связанный способ сделать это - использовать платформу внедрения зависимостей, такую ​​как Google Guice, и внедрить экземпляр в ваши компоненты. В остальном ответ Седрика Гатея довольно хорошо описывает решение.

Использование DI дало бы дополнительный бонус, заключающийся в том, что вам не нужно беспокоиться о том, чтобы получить другую реализацию для модульных тестов, поскольку вы можете легко определить ее в своем тестовом модуле.

Вы можете оставаться на золотом пути, «вставляя» внешний класс вручную в конструкторы страниц. Это избавит вас от хлопот по включению новой технологии на данном этапе, не препятствуя переключению на нее позже. Таким образом, ваши страницы не будут привязаны к конкретной (вашей) реализации WebApplication и могут быть легко протестированы путем предоставления в тестах другого (имитационного) экземпляра вашего внешнего класса.

person Nicktar    schedule 12.01.2012
comment
Сегодня прочитал об этом DI. Я новичок в калитке и сначала подумал попробовать без инъекций. Но ведь без него работать не рекомендуется, не так ли? - person user1090145; 12.01.2012
comment
@ user1090145 Я не тот человек, который задает этот вопрос, поскольку я большой поклонник как Wicket, так и Google Guice. Я думаю, это упрощает разделение до неузнаваемости, но другие утверждают, что он скрывает важную информацию в неожиданных местах (например, в модулях). Есть альтернативный подход, который я включил в свой ответ. - person Nicktar; 13.01.2012