2009-09-15 2 views
2

Кто-нибудь когда-либо видел/пытался написать шаблон локатора службы, в котором используется система настройки стиля Guice?Локатор в стиле Guice

В настоящее время у меня есть проект GWT (что происходит использовать GWT-RPC), который использует шаблон команды, где мой RPC-сервлет, который выглядит следующим образом ...

public interface TransactionService extends RemoteService { 

    <T extends Response> T execute(Action<T> action); 
} 

В моей текущей реализации метода выполнения Я делаю это ...

if(action instanceof SomeActionImpl){ 
    doSomeActionImpl((SomeActionImpl)action); 
}else if(action instanceof SomeActionImpl2){ 
    doSomeActionImpl2((SomeActionImpl2)action); 
} 

То, что я хотел бы сделать, это выяснить способ, чтобы избавиться от, если заявление гиганта. Мне нужен какой-то способ регистрации того, что класс ActionImpl1 должен быть делегирован другой реализации TransactioNService.

Любые идеи? Я думал просто добавлять записи в HashMap, где ключ - это класс Action, а значение - класс ServiceImpl. Один я имею ссылку на класс ServiceImpl, я мог бы использовать Guice для получения экземпляра TransactionService.

+0

Разве вы не можете использовать Bind для этого? (http://google-guice.googlecode.com/svn/trunk/javadoc/com/google/inject/Binder.html) – Margus

+0

Связывание будет означать Bind this type для этой реализации этого типа. – benstpierre

ответ

2

Взгляните на класс net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry в gwt-dispatch (http://code.google.com/p/gwt-dispatch/); он делает именно то, что вы предлагаете. Ниже приведена переменная-член, которая хранит обработчики:

закрытое окончательное Карта < Класс <? расширяет действие <? > >, ActionHandler <?,? > > погрузчики;

Если вы хотите выполнить обработчики на стороне сервера, используйте серверные компоненты gwt-dispatch; если это клиентский материал, тогда подумайте о моделировании своего диспетчерского класса в DefaultActionHandlerRegistry.

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