【问题标题】:Getting rid of Dagger 2 warning "Generating a MembersInjector"摆脱 Dagger 2 警告“生成 MembersInjector”
【发布时间】:2016-04-04 06:58:03
【问题描述】:

给定以下类

abstract class AbstractClass {
    @Inject SomeDependency someDependency;
}

class SomeClass extends AbstractClass {
    @Inject AnotherDependency anotherDepenency;

    public void onCreate() {
        component = // Get component instance somehow
        component.inject(this);
    }
}

在 Dagger 2 中,当将依赖项注入到从包含依赖项的抽象基类扩展而来的类中时,Dagger 在编译期间显示Generating a MembersInjector for AbstractClass. Prefer to run the dagger processor over that class instead. 类型的警告。

但是,如果我在 AbstractClass 中覆盖/实现 onCreate() 并在那里调用依赖注入,则依赖 someDependency 将被注入两次,这可能会导致意外行为。一次在onCreate()AbstractClass 和一次在onCreate()SomeClass

在防止重复注入依赖项的同时消除此警告的最佳解决方案是什么?

【问题讨论】:

    标签: java dagger dagger-2


    【解决方案1】:

    截至Dagger 2.9,这些警告默认关闭。

    【讨论】:

      【解决方案2】:

      解决方案可能是:仅在抽象类中定义 onCreate()

      【讨论】:

      • 不幸的是,这是不可能的,因为子类中声明的依赖项不能从onCreate()中的抽象类中注入。
      • 在文档中吗?或者你检查了匕首的来源?我不明白为什么这是不可能的。我自己的小型 DI 库可以解决这个问题(如果您需要注入 vie 和属性,欢迎您:github.com/ko5tik/andject/blob/master/src/main/java/de/pribluda/…
      • Dagger 2 在编译时生成依赖注入的代码。因此,将依赖项从超类注入子类将需要 Dagger 执行实例检查,因为具有不同依赖项的多个类可能从超类扩展。我怀疑 Dagger 能够做到这一点,也不认为架构师希望它执行这些检查。
      猜你喜欢
      • 1970-01-01
      • 2020-12-16
      • 2016-01-15
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多