Dagger 2注入方式

Dagger 2 inject method

我在玩 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 将像这样注入到几个不同的 Fragment 中:

@Inject
GameSetup gameSetup; 

onCreate(){
   getGameSetupComponent().inject(this); 
}

如上所示实现时它工作正常,但当我只使用单一方法时注入不起作用

 void inject(Fragment fragment);

对于所有片段。

我是不是做错了什么,或者这甚至是为了更好地控制 GameSetup 可能被注入的地方以及它可能不可用的地方?

Dagger2 不支持基础 class 开箱即用的注入。

void inject(Fragment fragment); 之类的方法只会在 Fragment class 中注入 @Inject 指定的字段,而不是其子 class es.

根据 Reddit 上的 jackhexen,你在做什么 is possible to do with reflection。但是反射可以破坏 Proguard。

我个人会投票给 this solution