Внедрить один и тот же компонент с разными параметрами с помощью Guice - PullRequest
3 голосов
/ 26 апреля 2011

У меня есть класс, который представляет графический компонент. Этот компонент отображает данные из базы данных.

Теперь у меня есть какая-то панель инструментов, на которой 12 моих компонентов выше. Конечно, я хочу повторно использовать этот компонент! Поэтому я подумал, что мог бы использовать пользовательскую аннотацию с параметрами и передать параметры поставщику. Я нашел какой-то взлом на Stackoverflow (/4295406/polzovatelskie-annotatsii-privyazki-guice-s-parametrami...), но, если честно, я не нашел никакой документации о том, как реализовать AnnotationImpl для моего пользовательского интерфейса.

Я не думаю, что AssistedInject - то, что мне нужно здесь, потому что мне не нравится идея ввести 12x один и тот же класс через AssistedInjection в мой конструктор.

Мне не нужно писать интерфейс и 12 классов реализации только для одного другого параметра.

У кого-нибудь есть идеи по моей проблеме?

1 Ответ

4 голосов
/ 26 апреля 2011

Я не совсем понимаю, что вы пытаетесь сделать, но я думаю, что Assisted Inject может быть правильным для вас. Не можете ли вы создать ComponentFactory, а затем указать в этом методе этот параметр, который вам нужен? Вам даже не нужно создавать конкретную реализацию Фабрики, поскольку Guice сделает это за вас, и вы можете указать ее следующим образом:

install(new FactoryModuleBuilder().build(ComponentFactory.class));

ComponentFactory будет выглядеть так:

public interface ComponentFactory {
    Component create(ParameterType parameter);
}

А сам компонент вот так:

public class Component {
    @Inject
    public WebClient(@Assisted ParameterType parameter, OtherService service) {
        // etc...
    }
}

Затем вы передаете ComponentFactory на панель инструментов, и она может (легко) создавать любые необходимые ей компоненты.

...