我在玩 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/

10-10 18:24
查看更多