有一个通用片段
public class MyFragment<TYPE> extends Fragment {
@Inject
SomeClass class;
public MyFragment(){}
}
}
我无法将此片段添加到片段绑定模块,因为Dagger抱怨说它是原始类型。
如何在绑定模块中提及TYPE类?
我的绑定模块现在看起来像这样:
@Module
public abstract class BindingModule {
@ContributesAndroidInjector(modules = MyFragmentModule.class)
abstract MyFragment bindMyFragment();
}
错误
error: [dagger.android.AndroidInjector.inject(T)] MyFragment has type parameters, cannot members inject the raw type.
答案 0 :(得分:0)
首先,我不得不说片段是特殊类,它的实例化必须由OS完成,通过将其添加到模块中,您可以绕过必须由OS控制的片段的生命周期。
但是,如果您希望按模块提供它,则必须对普通类型使用限定符。如下更改模块:
@Module
public abstract class BindingModule {
@ContributesAndroidInjector(modules = MyFragmentModule.class)
@Name('YourTypeName')
abstract MyFragment<YourType> bindMyFragment();
}
因此,无论您在哪里注入它,都必须指定类型及其限定符:
@Inject
@Name('YourTypeName')
MyFragment<YourType> fragmentReference;