2012-01-24 2 views
2

Я пытаюсь динамически генерировать некоторый набор обработчиков событий (используя подкласс com.google.gwt.core.ext.Generator). Весь процесс генерации отлично работает, мои обработчики обработаны EventBus через инсталляцию setter (аннотация @Inject), и вся идея состоит в том, что эти автоматически генерируемые обработчики регистрируются в (вложенном) EventBus под капотом. Проблема в том, что все эти обработчики должны быть каким-то образом созданы. GIN ничего не знает о них, пока они не будут связаны в модуле GIN; что-то, как показано ниже:Связывание сгенерированных классов в gin

bind(MyDynamicallyGeneratedHandler.class).asEagerSingleton(); 

Проблема с этим кодом является то, что я должен генерировать модуль джин также (который будет содержать все инструкции связывания (...)). Он работает хорошо, но я не могу установить сгенерированный модуль (@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). И эти зависимости (их типы) ale handler-specific (AnotherHandlerSpecificComponent в приведенном выше примере). Поэтому мне нужно создать экземпляр этих обработчиков таким образом, чтобы запускать инъекцию GIN (я не могу, например, вручную вводить зависимости).

Заранее благодарим за любые подсказки. Я полностью stucked ...

+0

Кажется, что там это аналогичный вопрос: http://stackoverflow.com/questions/5490729/gin-injection-inside-class-generated-by-deferred-binding –

ответ

0

Как насчет завода, где вы инъекционные зависимостей для обработчиков и попытаться создать экземпляр и зарегистрировать фактические обработчики (например, путем отражения или сканирования файловой системы?)

Смежные вопросы