java - Dagger Android View 注入(inject)错误

标签 java android dependency-injection dagger mortar

我花了很长时间才弄清楚如何设置 Dagger 依赖项来满足此代码段的本质。

我有一个 Controller ,WelcomeScreen(它扩展了 Path - 一个 Mortar/Flow 的东西),它声明它注入(inject)了一个 ThingView。然后,我注入(inject) ThingView 的提供者,并且我的 ThingView 构造函数有一个带有 Activity 的 @Inject 注释,这是我在其他地方提供的。

我最终仍然收到此错误:没有为members/com.....view.ThingView注册注入(inject)。您必须将其显式添加到模块之一的“注入(inject)”选项中。

想想我错过了什么?

public class WelcomeScreen extends Path {
  @dagger.Module(
      injects = {
          ThingView.class,
      },
      addsTo = ActivityModule.class)
  public class Module {
  }

  @Singleton
  public static class Presenter extends ViewPresenter<WelcomeView> {
    @Inject
    public Presenter(
        Provider<ThingView> thingViewProvider,) {
      // This causes an error: No inject registered for members/com.....view.ThingView.
      // You must explicitly add it to the 'injects' option in one of your modules.
      thingViewProvider.get()
    }
  }
}

public class ThingView extends LinearLayout {
 @Inject
  public ThingView(Activity activity) {
    super(activity);
    init(activity);
  }

  // Note - this might not be used anywhere.
  public ThingView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
  }

  private void init(Context context) {
    ObjectGraphService.inject(context, this);
    View view = View.inflate(context, R.layout.view_thread_pack, this);
    ButterKnife.inject(view);
  }
}

更新:我还尝试添加以下内容,这对错误消息没有影响:

@Module(addsTo = ApplicationModule.class, library = true)
public class ActivityModule {  
  @Provides
  public ThreadPackView providesThreadPackView() {
    return new ThreadPackView(activity);
  }
}

最佳答案

这并不是 Mortar 的工作原理。您无法将 View 注入(inject)到演示者中。相反,您将演示者注入(inject)到您的 View 中。这是我发现的一些示例,显示了与您正在做的类似的设置 https://github.com/Zhuinden/MortarFlowInitialDemo https://github.com/matthew-compton/NerdRoll

关于java - Dagger Android View 注入(inject)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33193870/

相关文章:

c# - MVVM Light 按键注册界面

java - Java中使用readly读取大文件

java - 将 objective-c 面向 block 的 api 转换为 android

java - Java中整数的数字平方和

android - 如何在cordova android App中使用proguard

JSP 中的 Spring 注入(inject)

java - 第 K 个最小元素算法

android - Android Gradle 插件测试 apk 生成器是否自动对我的测试 apk 进行多索引处理?如果是这样,为什么会生成 "NoSuchMethodError"

android - genymotion 允许 su 永久访问

java - 如何使用 @InjectMocks 作为另一个要模拟的类的依赖项?