2013-10-30 3 views
5

私のチームは、Androidアプリ内で依存性注入用にDaggerを採用しています。しかし、我々はそれを効率的に使用していることを確認したい。誰かが説明できるかどうか、またはDaggerが依存関係を注入するためのリフレクションに落ちるケースを説明するドキュメンテーションがあるかどうか、私は疑問に思っていましたか?Daggerが依存関係を注入するときにリフレクションに落ちる時期に関するドキュメントはありますか?

答えて

9

ダガーのフォールバックロジックは、FailoverLoaderクラスに組み込まれています。特定のモジュールのModuleAdapterをロードできなかったときにフェイルオーバーしましたが、最新のリリースではModuleAdapterをロードできないとエラーが発生して失敗します。

現在、注入が必要な特定のタイプのInjectAdapterクラスが見つからない場合、Daggerはフェイルオーバーします。最も一般的なケースは、@Injectフィールドを持たない注入型の抽象親を持つ場合です。この場合、InjectAdapterは作成されていないので、コンクリート注入可能タイプがロードされると、親のためのアダプタを検索しようとします。見つけられず、反射スタンドインが作成されます。

同様に、@Injectフィールドまたはコンストラクタで装飾されたクラスに対してコード生成を実行しない場合、Daggerも同様にリフレクションにフォールバックします。上記の継承の場合と同じ論理ですが、継承はコード生成を実行できなかった唯一のケースです。

他にも、http://github.com/google/daggerのGoogleフォークは、親(ハードコードされた親アダプタ)のアダプタを検索せずに親タイプを処理するアダプタを生成します。したがって、このフェールオーバーはGoogleフォークでは発生しません。最近までほとんど同じだったので、私たちはmavenにgoogleフォークをリリースしていませんが、親クラスのフェイルオーバーロジックが問題であれば、問題を提出してリリースを求めることができます。

関連する問題