Настройте создание управляемого объекта джина или создание двух разных экземпляров одного и того же класса - PullRequest
0 голосов
/ 20 марта 2012

Я хочу иметь возможность создать два экземпляра одного и того же класса и сделать так, чтобы они были внедрены с различными свойствами, а затем эти два объекта были добавлены в два определенных места в моем приложении.

В настоящее время у меня есть методв моем ClientModule ...

    @Provides
    @Named("bean1")
    public MainBean getMainBean() {
        MainBean mainBean = new MainBean(new SecondaryBean());
        return mainBean;
    }

А затем в моих докладчиках и т. д. я делаю следующее:

    public MyPresenter(final EventBus eventBus, final MyView view, 
                     @Named("bean1") MainBean bean, TitleSetupData data) {
        super(eventBus, view);
        this.bean1 = bean1;
    }

И это прекрасно работает.Основываясь на соответствующей аннотации @Named, я получаю правильный bean-компонент.

Однако у этого подхода есть недостаток в том, что мне нужно создать и внедрить все зависимости MainBean в методе @Provides.

Таким образом, любые аннотации @Inject в SecondaryBean, например, не учитываются.

Одна вещь, которую я мог бы сделать, - передать в метод getMainBean любые соответствующие зависимости, но мне интересно, может ли быть другое более элегантное или лучшее решение.

У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 21 марта 2012

Я столкнулся с той же проблемой. То, что вы ищете, это @ Assisted Inject , где некоторые параметры конструктора вводятся, а некоторые передаются в качестве аргументов при создании экземпляра вашего объекта.

Вы можете найти полный пример на этом посте в блоге , который помог мне начать работу.

...