我在玩 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)到几个不同的 Fragment 中,如下所示:
@Inject
GameSetup gameSetup;
onCreate(){
getGameSetupComponent().inject(this);
}
如上所示执行时效果很好,但当我只使用一种方法时,注入(inject)不起作用
void inject(Fragment fragment);
对于所有 fragment 。
我是不是做错了什么,或者这甚至是为了更好地控制
GameSetup
可能被注入(inject)的位置以及它可能不可用的位置? 最佳答案
Dagger2 不支持开箱即用的基类注入(inject)。
诸如 void inject(Fragment fragment);
之类的方法只会注入(inject) @Inject
类中用 Fragment
指定的字段,而不是其子类。
根据 Reddit 上的 jackhexen,你在做什么 is possible to do with reflection 。但是反射可以破坏 Proguard。
我个人会投票给 this solution 。
关于android - Dagger 2 注入(inject)方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31961094/