在dagger2中声明通用提供者方法

时间:2018-12-24 13:18:19

标签: android dagger-2 generic-programming

我在匕首2中的模块中提供了此provider方法:

@Provides
ArrayAdapter<String> arrayAdapter(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

然后我通过适配器构造函数注入它:

@Inject
public ReportMarhaleAdapter(ArrayAdapter<String> arrayAdapter) {
    detailMains = new ArrayList<>();
    ciExecStatus = new ArrayList<>();
    spinnerCiStatusAdapter = arrayAdapter;
}

是否可以在像这样的匕首中使用通用的Provide方法:

@Provides
ArrayAdapter<T> arrayAdapter(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

并且我在构造函数注入中声明T类型。例如:

 @Inject
public ReportMarhaleAdapter(ArrayAdapter<Object> arrayAdapter) {
    detailMains = new ArrayList<>();
    ...

1 个答案:

答案 0 :(得分:0)

我不是匕首专业人士,但是使用@Named可能会更好,而不是通用。

@Provides
@Named("SomethingXToBeProvided")
ArrayAdapter<String> arrayAdapterX(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

@Provides
@Named("SomethingYToBeProvided")
ArrayAdapter<String> arrayAdapterY(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

然后

@Inject
public ReportMarhaleAdapter(
    @Named("SomethingXToBeProvided") ArrayAdapter<Object> arrayAdapterX, 
    @Named("SomethingYToBeProvided") ArrayAdapter<Object> arrayAdapterY) {
    ...
}