2016-05-16 3 views
0

私はAndroid用のDagger2をちょっとやって遊んでいました。依存関係の注入方法については頭を抱えています。私は、コンポーネントを構築するために、このコードのより一般的な場所の1つがApplicationクラスにあることを理解しています。このようにして、私はさまざまなアクティビティからgetApplication()。getMyComponent()を呼び出し、関連するフィールドをアクティビティに注入できます。アクティビティの外部に注入するときにDagger2でコンポーネントを配置するにはどうすればよいですか?

しかし、私はPOJOを持っていて、別のPOJOをこの中に挿入したいとします(サービスオブジェクトにDAOオブジェクトが入っているとします)、POJOComponentを使って注入します。今、私はもはやアクティビティに(つまり、 'getApplication()'へのアクセスがないため)、私の質問はこれであり、前と同じようにApplicationクラスでこれを構築することはできません。サービスオブジェクトにコンポーネントを作成してDAOを注入するだけですか? DAOを別のオブジェクト/クラスに挿入したいのであれば、そのオブジェクトにもコンポーネントを構築する必要があるため、これは私には正しいとは思われません。

私はただ一度コンポーネントをビルドして、DAOを別のオブジェクト/クラスに注入する必要がありますか?私が考えることのできる1つの方法は、Applicationクラスで静的メソッドを使用していましたが、これはハックのように感じます。どんな指導もいただければ幸いです!

答えて

1

を避けることができない場合は、静的メソッドまたは変数を使用しないでください。ほとんどの場合、より良い方法があります。

android.app.Serviceがある場合、そのサービス自体は/ Contextであり、Applicationを簡単に取得したり、そのサービスコンテキストで新しいコンポーネントを作成することもできます。

次に、アクティビティやフラグメントと同様に注入することができます。


あなたがビジネスロジッククラスのいくつかの並べ替え、約サービスを話している場合、あなたはコンストラクタへのアクセス権を持っています。この場合、— は—となります。コンストラクタインジェクションを使用できます。

MyDaoが必要な場合は、コンストラクタに配置します。習慣に入ることはなく、それぞれのクラスが必要とする依存関係を握るようにしてください。何かあなたのサービスを使用したい場合は、それをDAOに提供する必要があります。あなたはおよそどのようは、それらの依存関係を提供するために、考えなければならないがあなたのサービスクラスを使用する場合はいつでも

。これは、アクティビティ、アプリケーション、フラグメント、またはサービスの中にある可能性が最も高いでしょう。—はすでに指摘した通りです。—は、アプリケーションとコンポーネントに再度アクセスできます。

+0

私が探していたのはまさにその答えでした。私が実装するとすぐに、それは最もクリーンな解決策であり、最も理にかなっています。歓声メイト。 – Shane

関連する問題