我正在玩弄 Dagger 2 .
我有以下模块
:
@Module
public class GameSetupModule {
@Provides
@Singleton
GameSetup provideGameSetup() {
return new GameSetup();
}
}
和相应的组件
:
@Singleton
@Component(modules = {GameSetupModule.class})
public interface GameSetupComponent {
GameSetup provideGameSetup();
void inject(SetupActivity activity);
// void inject(Fragment fragment);
void inject(SetupCompletedFragment fragment);
void inject(SelectQuarterLengthFragment fragment);
void inject(SelectTeamColorsFragment fragment);
void inject(SelectUserRoleFragment fragment);
}
如您所见,GameSetup 将像这样注入(inject)到几个不同的 fragment 中:
@Inject
GameSetup gameSetup;
onCreate(){
getGameSetupComponent().inject(this);
}
如上所示实现时它工作正常,但当我只使用一个方法时注入(inject)不起作用
void inject(Fragment fragment);
对于所有 fragment 。
我是不是做错了什么,或者这甚至是为了更好地控制 在何处 GameSetup
可能被注入(inject)以及在何处可能不可用?
最佳答案
Dagger2 不支持开箱即用的基类注入(inject)。
void inject(Fragment fragment);
等方法只会注入(inject) Fragment
类中使用 @Inject
指定的字段,而不是它的子类。
根据 Reddit 上的 jackhexen,你在做什么 is possible to do with reflection .但是反射可以破坏 Proguard。
我个人会投票给 this solution .
关于android - Dagger 2注入(inject)方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31961094/