2017-03-28 5 views
0

ほとんどのケースアクティビティでアプリケーションコンポーネントからの共有オブジェクトを使用する必要があるか、またはフラグメントコンポーネントがコンテナアクティビティによって提供されるいくつかのオブジェクトを使用する必要がある場合は、@subcomponentを使用しました。Dagger2 - アクティビティコンポーネントは他のコンポーネントのサブコンポーネントですか?

今、別のアクティビティコンポーネントのアクティビティコンポーネントをsubcomponentにすることができますか?たとえば、TaskDetailActivityにはタスクオブジェクトがあり、TaskParticipantActivity,TaskProgressActivityなどの他のアクティビティにいくつかのフラグメントを提供したいとします。

他のアクティビティにタスクオブジェクトを提供する伝統的な方法は、intentオブジェクトに設定されていますが、このケースでDagger2を使用したいのですか?

更新:この記事のUserScopeのケースと似ていますhttp://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/、アプリケーションクラスにユーザーコンポーネントを保存する代わりに、アクティビティに保存することはできますか?つまり、TaskDetailActivity

+1

Androidがアクティビティを破棄して再作成すると、その周囲のコンテキストを再作成できますか? –

+0

興味深い質問@JeffBowman、私はダガーモジュールを使用すると、すべての依存関係は、スコープ内の前と同じインスタンスで注入されることができると思う。 –

答えて

2

コンポーネントは、同様のライフサイクルのオブジェクトをグループ化するためのものです。コンポーネントは特定の機能セット(TaskActivityTaskPresenterを注入するためのTaskComponentなど)に対応することがありますが、機能セットごとに1つのコンポーネントのみを主張することは常に可能であるとは限りません(たとえば、TaskComponentすべてのタスクに関連するアクティビティと依存関係)。

代わりに、Dagger 2では、モジュールを使用して再利用性を利用できます。これは、モジュール間で簡単に交換できます。 Dagger 2 official documentationでテスト可能モジュールを構成するためのアドバイスの制約の中で、機能に合ったモジュールを構成することができます(たとえば、すべてのタスクに関連する依存関係の場合はTaskModule)。コンポーネントは軽量であるため、アクティビティのさまざまなライフサイクルを処理するなど、できるだけ多くのコンポーネントを作成することができます。また、Module@interfaceの中にClass<?> [] includes()メソッドを使用してモジュールを作成することもできます。

具体的なシナリオでは、TaskオブジェクトをTaskDetailActivityから共有します。 TaskDetailActivity内のTaskへの参照を保持していた場合は、TaskDetailActivityが破棄された時点でその参照は利用できなくなります。 Taskをモジュールにバインドしてアプリスコープレベルでそのモジュールへの参照を保持するという解決策を試すことができますが、あなたが持っている記事のアプリスコープのレベルでUserScopeと同じことを行うことになりますリンクされた。 Dagger 2を使用してアクティビティ間でTaskオブジェクトを共有するためのソリューションの種類には、必ずしもアプリスコープのレベルでオブジェクトへの参照を維持する必要があります。ダガー2を使用して

Parcelablesnewキーワードまたはシリアライズ/デシリアライゼーションのが今間違っているので、あなたの最初の直感は、私はあなたが正しいことを言うの通信にIntentを使用する場合という意味ではありません。 Taskと直接通信するよりも堅牢なソリューションが必要な場合は、TaskRepositoryを抽出し、取得するTaskidを含むアクティビティの間にIntentを送信することができます。実際、Google Android Architecture Blueprintsの一部には、このような解決策があります。

+0

非常に詳細な説明をありがとうございます。私は最終的に、私がタグ付けしたリンク上の 'UserComponent'に似たアプリケーションインスタンスのTaskコンポーネントを保持することにしました。 –

+0

@NguyenMinhBinh私はそれが助けてうれしいです。受け入れてくれてありがとう –

関連する問題