摆脱 Dagger 2 警告 "Generating a MembersInjector"
Getting rid of Dagger 2 warning "Generating a MembersInjector"
给出以下 classes
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 中,当将依赖项注入 class 中时,该 class 从抽象基础 class 扩展而来,后者也包含依赖项,Dagger 在编译期间显示 Generating a MembersInjector for AbstractClass. Prefer to run the dagger processor over that class instead.
类型的警告。
然而,如果我在 AbstractClass
中 override/implement onCreate()
并在那里调用依赖注入,那么依赖 someDependency
将被注入两次,这可能会导致意外行为.一次在 AbstractClass
的 onCreate()
中,一次在 SomeClass
的 onCreate()
中一次。
在防止重复注入依赖项的同时消除此警告的最佳解决方案是什么?
解决方案可能是:仅在抽象 class 中定义 onCreate()
自 Dagger 2.9 起,这些警告默认关闭。
给出以下 classes
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 中,当将依赖项注入 class 中时,该 class 从抽象基础 class 扩展而来,后者也包含依赖项,Dagger 在编译期间显示 Generating a MembersInjector for AbstractClass. Prefer to run the dagger processor over that class instead.
类型的警告。
然而,如果我在 AbstractClass
中 override/implement onCreate()
并在那里调用依赖注入,那么依赖 someDependency
将被注入两次,这可能会导致意外行为.一次在 AbstractClass
的 onCreate()
中,一次在 SomeClass
的 onCreate()
中一次。
在防止重复注入依赖项的同时消除此警告的最佳解决方案是什么?
解决方案可能是:仅在抽象 class 中定义 onCreate()
自 Dagger 2.9 起,这些警告默认关闭。