我的模块如下所示,
@Module
public abstract class BindsModuleEx {
@Binds
@Named("obj2")
public abstract SomeInterface provideSomeInterface2(SomeInterfaceImpl2 someInterfaceImpl);
@Binds
@Named("obj1")
public abstract SomeInterface provideSomeInterface1(SomeInterfaceImpl1 someInterfaceImpl);
}
我的SomeInterface
实现如下所示
public class SomeInterfaceImpl1 implements SomeInterface {
@Inject
@Named("obj1")
public SomeInterfaceImpl1() {
}
public class SomeInterfaceImpl2 implements SomeInterface {
@Inject
@Named("obj2")
public SomeInterfaceImpl2() {
}
我可以在@Named
方法上使用@Qualifier
或@Binds
吗?
我知道将@Provides
与@Named
一起使用,但我想知道为什么这不起作用,并且找到解决此类情况的正确方法。
错误消息如下所示
error: @Qualifier annotations are not allowed on @Inject constructors.
〜先谢谢。
答案 0 :(得分:1)
@Named限定符不会继续构造函数声明 - 您需要在注入目标上使用它,例如如果您在活动中注入“obj1”,那么您将使用限定符。
答案 1 :(得分:0)
这就是我修改它的方式,并且有效。
public class MainActivity extends BaseActivity {
@Inject
@Named("obj1")
SomeInterface someInterface1;
@Inject
@Named("obj2")
SomeInterface someInterface2;
}
这就是我SomeInterface
的实现现在
public class SomeInterfaceImpl1 implements SomeInterface {
@Inject
public SomeInterfaceImpl1() {
}