【问题标题】:Dagger 2 inject method匕首2注入方法
【发布时间】:2015-11-04 19:39:47
【问题描述】:

我在玩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 可能被注入以及它可能不可用?

【问题讨论】:

    标签: android dependency-injection dagger-2


    【解决方案1】:

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

    诸如void inject(Fragment fragment); 之类的方法只会在Fragment 类中注入由@Inject 指定的字段,而不是它的子类。

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

    我个人会投票给this solution

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      相关资源
      最近更新 更多