RoboGuice如何知道注射意味着什么?

时间:2014-01-15 18:35:35

标签: android dependency-injection roboguice

我正在使用RoboGuice 4.0beta2,我遇到了这个问题

我有几个不同的对象实现相同的接口

打电话给他们 实现ITest B实现了ITest C实现了ITest

我有D类,它一起使用所有3个实现,每个实现有不同的目的,但是相同的API

在D类内部我想注入A,B和C,它们彼此无关,除了它们都实现相同的接口

我如何配置Module类以了解我的意思是ITest的不同实现?

1 个答案:

答案 0 :(得分: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;
}