【问题标题】:Dagger 2 Android application component is missing inject methodDagger 2 Android 应用程序组件缺少注入方法
【发布时间】:2017-08-13 03:16:44
【问题描述】:

我尝试了一个带有 dagger.android 包的新发布的 Dagger 2.10 的小型 Android 项目。 Dagger 应该只注入 MainApplication 类,其他没有任何依赖关系:

build.gradle

dependencies {
  ...
  // Dagger
  compile 'com.google.dagger:dagger:2.10'
  compile 'com.google.dagger:dagger-android:2.10'
  annotationProcessor 'com.google.dagger:dagger-compiler:2.10'

  // Fix for incompatible library versions when adding dagger-android and having espresso-core:2.2.2 in tests
  androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1'
}

MainApplication.java

public class MainApplication extends Application implements HasDispatchingActivityInjector {

  @Inject DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;

  @Override
  public void onCreate() {
      super.onCreate();
      DaggerMainApplicationComponent.create();
   // DaggerMainApplicationComponent.create().inject(this); does not work - no inject(...) method!
  }

  @Override
  public DispatchingAndroidInjector<Activity> activityInjector() {
      return dispatchingAndroidInjector;
  }
}

MainApplicationComponent.java

@Component(modules = AndroidInjectionModule.class)
public interface MainApplicationComponent {}

自动生成的 DaggerMainApplicationComponent.java:

public final class DaggerMainApplicationComponent implements MainApplicationComponent {
  private DaggerMainApplicationComponent(Builder builder) {
    assert builder != null;
  }

  public static Builder builder() {
    return new Builder();
  }

  public static MainApplicationComponent create() {
    return new Builder().build();
  }

  public static final class Builder {
    private Builder() {}

    public MainApplicationComponent build() {
      return new DaggerMainApplicationComponent(this);
    }
  }
}

我是 Dagger 的新手,有很多资源,但很多人都在用过时的 Dagger 库描述 DI。我的实施有什么问题? 我还发现了一个名为 MainApplication_MembersInjector 的自动生成的类...我必须自己使用它吗?

【问题讨论】:

    标签: android dagger-2 dagger


    【解决方案1】:
    @Component(modules = AndroidInjectionModule.class)
    public interface MainApplicationComponent {
        void inject(DispatchingAndroidInjector dispatchingAndroidInjector);
    
    }
    

    【讨论】:

    • 差不多,但是谢谢 - 你让我走上了正轨。这有效:无效注入(MainApplication 应用程序);而不是您发布的参数。
    • 是的,你必须使用一个类,注入方法不适用于接口
    • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。提及为什么这个答案比其他答案更合适也没有什么坏处。
    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2016-12-01
    相关资源
    最近更新 更多