2014-01-15 1 views
3

Я использую RoboGuice 4.0beta2, и я эту проблемуКак RoboGuice знает, что я имею в виду?

У меня есть несколько различных объектов, которые реализуют один и тот же интерфейс

называть их реализует ITest B реализует ITest C реализует ITest

У меня есть класс D, который использует все 3 реализации вместе, каждый из них имеет другую цель, но тот же API для этого

Внутри класса D я хотел бы добавить A, B и C, что hav e ничего общего с eachother, кроме того факта, что все они реализуют один и тот же интерфейс.

Как настроить класс модуля, чтобы знать, что я имею в виду различные реализации ITest?

+0

Вы вводите A, B и C своими типа или под типом ITest? –

+0

Я хочу ввести его по типу ITest –

ответ

3

Предполагая, что вы имеете следующую конфигурацию:

class D{ 
    @Inject ITest a; 
    @Inject ITest b; 
    @Inject ITest c; 
} 

вы можете настроить ваш модуль, как следующий, так что вы можете вводить различные типы, @Name:

public class ABCModule extends AbstractModule { 

    @Override 
    protected void configure() { 
     bind(ITest.class).annotatedWith(Names.named("a")).to(A.class); 
     bind(ITest.class).annotatedWith(Names.named("b")).to(B.class); 
     bind(ITest.class).annotatedWith(Names.named("c")).to(C.class); 
    } 
} 

, которая позволяет впрыскивать такие как:

class D{ 
    @Inject @Named("a") ITest a; 
    @Inject @Named("b") ITest b; 
    @Inject @Named("c") ITest c; 
} 

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

  • Нет связанных вопросов^_^