为[Class]生成MembersInjector。更喜欢在该类上运行匕首处理器

时间:2016-05-25 12:56:46

标签: android dagger-2

我有这些警告,我不明白他们的意思。有人可以指点我吗?

对于我注入的类(其中有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.

2 个答案:

答案 0 :(得分:6)

当Dagger的注释处理器运行时,它会生成两种类型:

  1. @Component接口
  2. 的实现 每个Provider' d类型的
  3. MembersInjector@Inject实施。
  4. 在生成@Component接口实现时,它会根据模块的配置方式连接每个ProviderMembersInjector实现。如果您的组件或其中的任何模块引用了在没有 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>