これらの警告があり、その意味がわかりません。誰かが私に何かを指摘できますか?
私が注入するクラスの場合(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.
Daggerの注釈プロセッサを実行すると、次の2種類のクラスが生成されます。
@Component
インターフェースの実装@Inject
'dタイプごとのProvider
およびMembersInjector
実装。@Component
インターフェース実装を生成している間、モジュールがどのように構成されたかに従って、Provider
およびMembersInjector
実装のそれぞれを接続します。コンポーネントまたはその中のモジュールのいずれかが、コンパイルされた@Inject
'dタイプを参照している場合なし Daggerプロセッサは、引き続きProvider
またはMembersInjector
ですが、@Inject
'dクラスではなく、コンポーネントごとに1回です。
これは本当に問題ではありません(したがって、警告やエラーではありません)が、Daggerプロセッサが単一のアプリケーションに対して同じクラスを何度も生成する可能性があることを意味します。それが本当に手に負えなくなった場合、それはコンパイルを遅くし、もう少しバイトコードを消費するかもしれません。
簡単な修正は、@Inject
'dタイプとコンポーネントをコンパイルするときに、Daggerアノテーションプロセッサを実行していることを確認することです。
次のようなスーパークラスとサブクラスがあると、この_"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
への挿入は期待どおりに機能します。