我正在玩Dagger 2。
我有以下Module
:
@Module
public class GameSetupModule {
@Provides
@Singleton
GameSetup provideGameSetup() {
return new GameSetup();
}
}
和相应的Component
:
@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
GameSetup gameSetup;
onCreate(){
getGameSetupComponent().inject(this);
}
如上所述,它实现正常,但是当我只使用单一方法
时注入不起作用 void inject(Fragment fragment);
表示所有碎片。
我做错了什么或者是否打算更多地控制 GameSetup
可能会被注入以及哪些可能无法使用?
答案 0 :(得分:8)
Dagger2不支持开箱即用的基类注射。
void inject(Fragment fragment);
等方法只会在@Inject
类中注入Fragment
指定的字段,而不是其子类。
根据Reddit上的jackhexen,你在做什么is possible to do with reflection。但反思可以打破Proguard。
我个人会投票给this solution。