android - Dagger 2注入(inject)方式

标签 android dependency-injection dagger-2

我正在玩弄 Dagger 2 .

我有以下模块:

@Module
public class GameSetupModule {
    @Provides
    @Singleton
    GameSetup provideGameSetup() {
        return new GameSetup();
    }
}

和相应的组件:

@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) Fragment 类中使用 @Inject 指定的字段,而不是它的子类。

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

我个人会投票给 this solution .

关于android - Dagger 2注入(inject)方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31961094/

相关文章:

Java Spring : How to use `@Value` annotation to inject an `Environment` property?

c# - 涉及属性类型的库中 DI 的最佳实践

android - 如何创建或找到 ABI armeabi 的 "userdata.img"文件以复制到 AVD 文件夹中

android - 使用 sqlite 从表中获取每周总和数据

java - Android java.lang.ClassCastException : android. widget.RelativeLayout 无法转换为 android.widget.EditText

android - App_HiltComponents.ActivityC 范围为 @dagger.hilt.android.scopes.ActivityScoped 可能不会引用具有不同范围的绑定(bind)

java - Dagger 的 2 个 Activity 的单个实例

android - 不同屏幕尺寸的不同字符串

c# - 如何使用依赖注入(inject)将状态传递到依赖链中

android - Dagger 不允许我在一个类中使用两个相同类型的对象