web-dev-qa-db-ja.com

[クラス]のMembersInjectorを生成しています。代わりに、そのクラスよりも短剣プロセッサを実行することをお勧めします

これらの警告があり、その意味がわかりません。誰かが私に何かを指摘できますか?

私が注入するクラスの場合(component.inject(this)ステートメントがある場合)

Note: Generating a MembersInjector for [class] Prefer to run the dagger processor over that class instead.

注入しているオブジェクトの場合(@Injectで注釈が付けられたコンストラクター)

Note: Generating a Provider for [class]. Prefer to run the dagger processor over that class instead.
18
znat

Daggerの注釈プロセッサを実行すると、次の2種類のクラスが生成されます。

  1. @Componentインターフェースの実装
  2. @Inject 'dタイプごとのProviderおよびMembersInjector実装。

@Componentインターフェース実装を生成している間、モジュールがどのように構成されたかに従って、ProviderおよびMembersInjector実装のそれぞれを接続します。コンポーネントまたはその中のモジュールのいずれかが、コンパイルされた@Inject'dタイプを参照している場合なし Daggerプロセッサは、引き続きProviderまたはMembersInjectorですが、@Inject'dクラスではなく、コンポーネントごとに1回です。

これは本当に問題ではありません(したがって、警告やエラーではありません)が、Daggerプロセッサが単一のアプリケーションに対して同じクラスを何度も生成する可能性があることを意味します。それが本当に手に負えなくなった場合、それはコンパイルを遅くし、もう少しバイトコードを消費するかもしれません。

簡単な修正は、@Inject'dタイプとコンポーネントをコンパイルするときに、Daggerアノテーションプロセッサを実行していることを確認することです。

6
gk5885

次のようなスーパークラスとサブクラスがあると、この_"Generating a MembersInjector for..."_ Dagger2警告が表示されていました...

_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インターフェースには次の2つの注入メソッドがありました...

_void inject(BaseActivity activity);
void inject(ConcreteActivity activity);
_

Componentインターフェイスからinject(BaseActivity activity)メソッドを削除し、BaseActivityクラスからComponent.inject(this)メソッド呼び出しを削除しました。サブクラス(BaseActivity)がComponent.inject(this)を呼び出し、アプリケーションをビルドしたときに_"Generating a MembersInjector for..."_ Dagger 2の警告が表示されなくなった場合でも、ConcreteActivityへの挿入は期待どおりに機能します。

3
Adil Hussain