Я пытаюсь динамически генерировать некоторый набор обработчиков событий (используя подкласс com.google.gwt.core.ext.Generator
). Весь процесс генерации работает нормально, мои сгенерированные обработчики принимают EventBus через инъекцию сеттера (аннотация @Inject), и вся идея состоит в том, что эти автоматически сгенерированные обработчики регистрируются в (внедренном) EventBus под капотом. Проблема в том, что все эти обработчики должны быть каким-то образом созданы. GIN ничего не знает о них, пока они не будут связаны в модуле GIN; что-то вроде ниже:
bind(MyDynamicallyGeneratedHandler.class).asEagerSingleton();
Проблема с этим кодом заключается в том, что мне также нужно сгенерировать модуль gin (который будет содержать все инструкции bind (...)). Он работает хорошо, но я не могу установить сгенерированный модуль (@Inject it) в другой не сгенерированный модуль, чтобы выполнялись его инструкции связывания (в результате установки (MyDynamicModule.class)). Я пробовал подвохи со статическим внедрением и провайдерами - все без успеха
Есть ли способ настроить динамически генерируемый модуль GIN? Или, может быть, есть какой-либо способ создания динамически сгенерированных обработчиков, чтобы происходило внедрение сеттера (и, следовательно, регистрация шины событий)?
Вот пример кода:
// it is standard interface
public interace DynamicHandler {
@Inject
void setEventBus(EventBus eventBus);
}
// one of dynamically generated handlers
// where (how) to instantiate me?
public class MyHandler implements DynamicHandler {
@Inject
AnotherHandlerSpecificComponent component
void setEventBus(EventBus eventBus) {
eventBus.register(...); // register myself
}
}
Важно отметить, что все эти динамически генерируемые обработчики имеют некоторые другие зависимости @Injected (кроме EventBus). И эти зависимости (их типы) зависят от конкретного обработчика (AnotherHandlerSpecificComponent
в приведенном выше примере). Поэтому мне нужно создать экземпляры этих обработчиков таким образом, чтобы инициировать внедрение GIN (я не могу, например, ввести зависимости вручную).
Заранее спасибо за любые подсказки. Я полностью застрял ...