首页 > 解决方案 > Dagger2 Android 依赖注入 java

问题描述

我是匕首2的新手。我正在尝试创建一个“ActivityComponent”,它将从我的活动中检索所有信息(例如:上下文...),以及我试图在其中注入“Activity 组件”的另一个组件(在下面的代码中,它是 CheckErrorsModel 类)。

@Singleton
public class CheckErrorsModel {

private Context context;

@Inject
public CheckErrorsModel(MainActivityComponent mainActivityComponent) {
    this.context = mainActivityComponent.getContext();
}

public void test() {
    Log.d("test", "test lancé ");
}
}

接口组件类:

  @Singleton
  @Component()
  public interface CheckErrorsModelDi {
      CheckErrorsModel getCheckErrorsModel();
      MainActivityComponent getApplicationComponent();
  }

以及与应用程序上下文类相关的所有内容:

@Component(modules = {MainActivityModule.class})
@Singleton
public interface MainActivityComponent {
   Context getContext();
   void inject(MainActivity mainActivity);
}

模块类:

@Module
public class MainActivityModule {
    private final Context context;

    public MainActivityModule(Context context) {
       this.context = context;
    }

    @Provides
    @Singleton
    Context provideContext(){
        return context;
    }
}

但是一旦我尝试构建应用程序:我遇到了一些错误:

.MainActivityComponent 不能在没有 @Provides 注释的方法的情况下提供 MainActivityComponent getApplicationComponent();

如果没有 @Provides 注释的方法,就无法提供 MainActivityComponent。检查错误模型 getCheckErrorsModel()

标签: javaandroiddependency-injectionbuilddagger-2

解决方案


我认为这是因为您的 CheckErrorsModelDi 没有任何模块。范围(如@Singleton)应始终位于模块方法和组件上

这应该是MainActivityComponent的子组件

你注入的 Alors 方法似乎有点奇怪。

您应该使用 à builder 而不是查看绑定实例


推荐阅读