可以说我有:匕首2 - 2提供方法,该方法提供相同的接口
public interface Shape {}
public class Rectangle implements Shape {
}
public class Circle implements Shape {
}
和我有一个ApplicationModule其中需要提供实例两者建议和圈:
@Module
public class ApplicationModule {
private Shape rec;
private Shape circle;
public ApplicationModule() {
rec = new Rectangle();
circle= new Circle();
}
@Provides
public Shape provideRectangle() {
return rec ;
}
@Provides
public Shape provideCircle() {
return circle;
}
}
and ApplicationComponent:
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
Shape provideRectangle();
}
用代码的方式 - 它不会编译。 错误说
Error:(33, 20) error: Shape is bound multiple times.
这是有道理的,我认为这不能做,因为组件试图找到一个Shape
实例,并发现他们两个,所以它不知道哪一个返回。
我的问题是 - 我该如何处理这个问题?
您可以使用'@ Qualifier'来区分不同的类型。 [Here](http://frogermcs.github.io/dependency-injection-with-dagger-2-the-api/)是如何使用此注释的简短示例。另外[这个SO问题](http://stackoverflow.com/questions/35829544/dagger2-custom-qualifier-usage)也许有用。 – QBrute
@ ofek-agmon在使用di概念时,不要在构造函数定义中使用new,而应该提供和提供新Object的方法,并且这些对象将在相应的构造函数中注入。 – sector11
感谢您的回答。@ sector11你能指点我一个示例代码来看看你的意思吗? –