我有这些警告,我不明白他们的意思。有人可以指点我吗?
对于我注入的类(其中有component.inject(this)
语句)
Note: Generating a MembersInjector for [class] Prefer to run the dagger processor over that class instead.
对于我正在注入的对象(使用@Inject
注释的constuctor)
Note: Generating a Provider for [class]. Prefer to run the dagger processor over that class instead.
答案 0 :(得分:6)
当Dagger的注释处理器运行时,它会生成两种类型:
@Component
接口Provider
' d类型的MembersInjector
和@Inject
实施。在生成@Component
接口实现时,它会根据模块的配置方式连接每个Provider
和MembersInjector
实现。如果您的组件或其中的任何模块引用了在没有 Dagger处理器的情况下编译的@Inject
&#d; d类型,它仍会生成Provider
或{{ 1}},但每个组件一次,而不是MembersInjector
' d。一次。
这不是确实问题(因此不是警告或错误),但它确实意味着可能让Dagger处理器为单个应用程序多次生成相同的类。它可能会减慢编译速度,如果真的失控了就会占用更多的字节码。
简单的解决方法是确保在编译@Inject
&n;类型以及组件时运行Dagger注释处理器。
答案 1 :(得分:3)
当我有一个超类和子类时,我得到了"Generating a MembersInjector for..."
Dagger 2警告......
public abstract class BaseActivity extends Actvity {
@Inject
DependencyA dependencyA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((MyApplication) getApplication()).getComponent().inject(this);
}
public class ConcreteActivity extends BaseActvity {
@Inject
DependencyB dependencyB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((MyApplication) getApplication()).getComponent().inject(this);
}
}
...我的Component
接口有两种注入方法,如下所示......
void inject(BaseActivity activity);
void inject(ConcreteActivity activity);
我从inject(BaseActivity activity)
界面中删除了Component
方法,并从Component.inject(this)
类中删除了BaseActivity
方法调用。当子类(BaseActivity
)调用ConcreteActivity
时,Component.inject(this)
中的注入仍然按预期工作,当我构建应用程序时,我不再看到"Generating a MembersInjector for..."
Dagger 2警告。< / p>