【发布时间】:2017-03-19 17:44:04
【问题描述】:
我是Dagger2 的新手,并尝试构建这样的示例以了解它是如何工作的。
这是我的示例代码:
MainActivity
public class MainActivity extends AppCompatActivity {
@Inject
protected ApiInterface apiInterface;
@Inject
protected Integer valueInt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
App.getComponent().inject(this);
}
public void testButton(View view) {
if (apiInterface == null || valueInt == null) {
Log.e("TAG", "apiInterface == null");
} else {
Log.e("TAG", "apiInterface != null : " + apiInterface.value + " : " + valueInt);
}
}
}
Component
@Singleton
@Component(modules = {ModelModule.class, AnotherModule.class})
interface AppComponent {
void inject(MainActivity mainActivity);
}
Module
@Module
class ModelModule {
@Provides
int provideInt() {
return 1;
}
@Provides
ApiInterface provideApiInterface(int i) {
return ApiModule.getApiInterface(i);
}
}
Module
@Module
class AnotherModule {
@Provides
Integer getInt(){
return 3;
}
}
正如您在MainActivity 的示例中看到的那样,我注入了Integer
@Inject
protected Integer valueInt;
而且我还想使用int 提供值作为此方法provideApiInterface(int i) 的参数。
最终我得到这样的错误
Error:(11, 10) error: java.lang.Integer is bound multiple times:
@Provides int com.krokosha.aleksey.daggertwo.ModelModule.provideInt()
@Provides Integer com.krokosha.aleksey.daggertwo.AnotherModule.getInt()
我做错了什么?
我应该如何以适当的方式提供此参数以避免此类错误?
【问题讨论】: