Я делаю по одному модулю для каждого логического раздела (по одному или более для каждого проекта), а затем один узел доступа, доступный с точки входа, ссылаясь на все необходимые ему модули. Все (почти) за точкой входа затем создается Джином, поэтому в него можно будет вставлять поля.
Каждый новый Ginjector, который является GWT.create
', будет иметь свой собственный набор синглетонов, поэтому важно создать только один корневой ginjector. Этот инжектор можно внедрить в другие части кодовой базы, но, как правило, он делает код более читабельным, если вы этого не сделаете.
Если вам нужно передать экземпляры EventBus
или что-то еще объектам, не созданным Джином, есть несколько вариантов. Первый - создать свой собственный экземпляр Provider и связать его в модуле (или создать методы в модуле, помеченном @Provides
). Второе - создать в ginjector методы, которые принимают один параметр и возвращают void - Gin сможет внедрить все поля и сеттеры для этого объявленного типа. В приведенном ниже примере будут добавлены только поля и сеттеры, помеченные @Inject
в MyWidget
и его суперклассах - он также не будет искать подклассы.
void injectMyWidget(MyWidget widget);