2009-08-02 1 views
1

У меня есть приложение на основе графического интерфейса, которое теперь требует нескольких экземпляров заданного типа, поэтому я планирую использовать именованную аннотацию для устранения неоднозначности зависимостей. Однако зависимость этого типа также должна меняться в зависимости от того, какой я получаю.Guice: Изменение типа, введенного в соответствии с тем, как был введен пользователь.

Для иллюстрации позволяет сказать, у меня есть

@Singleton 
public class FooCache { 
    private final FooCacheListener listener; 
    @Inject 
    public FooCache(FooCacheListener listener) { 
     this.listener = listener; 
    } 
    // do stuff 
} 

, а затем позволяет сказать, что у меня есть потребность в 2 отдельных случаях, так что я мог бы иметь

@ThatOne FooCache 

в одном классе и

@ThisOne FooCache 

в другой.

Теперь позвольте сказать, что я хочу, чтобы в каждом случае был другой слушатель (возможно, он что-то пишет в базу данных, а другой отправляет уведомление по JMS или к некоторому распределенному кешу). Как мне это сделать? Я не могу видеть, что я могу вставить имя в FooCacheListener, поскольку мне нужно другое имя в одной ситуации, а другое - у меня есть только одно место. Единственный способ, которым я могу это сделать, - это подклассификация FooCache, но для меня это действительно неуклюжий подход.

Приветствия Matt

ответ

2

Вы можете быть в состоянии использовать PrivateModules. Go here и прокрутите вниз до Как создать два похожих, но немного разных дерева объектов? Это способ иметь два разных экземпляра одного и того же класса, который звучит почти точно, что вы пытаетесь сделать. Вы можете передать своим кэшистщикам вместо «левого» и «правого», приведенного в примере. Есть больше ссылок с деталями оттуда, если они выглядят так, как вы хотите.

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

+0

как-то я пропустил это в документах, вот что я ищу. Благодарю. – Matt

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