具有构造函数注入的Dagger2限定符/命名提供程序

时间:2018-01-17 11:14:31

标签: java dagger-2

我有两个课程:FooBarFoo取决于BarBar有两个单例实例:

@Singleton
@Provides
@Named("first")
static Bar provideFirstBar() {
    return new Bar();
}

@Singleton
@Provides
@Named("second")
static Bar provideSecondBar() {
    return new Bar();
}

以及Foo的两个单例实例(每个都取决于相关的Bar)。

@Singleton
@Provides
@Named("first")
static Foo provideFirstFoo(@Named("first") Bar bar) {
    return new Foo(bar);
}

@Singleton
@Provides
@Named("second")
static Foo provideSecondFoo(@Named("second") Bar bar) {
    return new Foo(bar);
}

现在,问题是:我想简化这个模块并摆脱provide*Foo方法,而是使用Foo的构造函数依赖。如果我只需要@Named("first")实例,我知道该怎么做:

@Singleton
@Named("first")
class Foo {
    @Inject
    Foo(Bar bar) { }
}

但是是否可以同时使用@Named实例和构造函数注入所有可能的名称?或者我应该使用@Provider方法?

1 个答案:

答案 0 :(得分:0)

我以前曾问过这个问题,但总是被告知不。您无法使用构造函数注入命名/限定符注释。