web-dev-qa-db-ja.com

KotlinとDaggerの使用

Daggerを使用して依存関係をクラス、特にActivitiesのような引数なしのコンストラクタークラスにDaggerで注入するための最良の方法は何ですか?ダガー2は状況を改善する可能性がありますか?

前もって感謝します。

24
Kirill Rakhman

Kotlin M13のリリース以降、依存性注入をサポートするために(Dagger 1&2と同様に)、その他の新しいプロパティが特に追加されました。フレームワーク。

これはlateinitプロパティと呼ばれます。ドキュメントからの抜粋:

 class Example {
            @Inject
            lateinit var bar: Bar 
 }

一言で言えば、barには初期化子はありませんが、null以外の型として宣言されています。初期化の前に読み込もうとすると、例外がスローされます。
それ以外の場合は、Daggerを使用して初期化すると、通常のプロパティとして使用できます。

すべては 言語ドキュメント で十分に説明されており、 ブログ投稿相対 でM13リリースを確認することもできます。

33
Ben

私はしばらくの間私の答えを更新していませんでした、そしてそれは時代遅れになりました。また、M13/M14で機能する@Benからの新しい回答にも気づきました。

最新のKotlinとDagger2のバージョンを最新の状態に保つように努めている私のテンプレートプロジェクトに、関心のあるすべての人をリダイレクトするのが最善であると判断しました。 Kotlin + Dagger 2サンプル

そこでは、複数の注釈などを含む、オブジェクトを挿入する方法について説明しています。

13
Damian Petla

Daggerは、私が知る限り、Kotlinではまだサポートされていない注釈処理に依存しています。しかし、彼らはそれが計画されていると言います。一方、Dagger依存関係を持つJavaクラスを拡張するか、リフレクションベースのインジェクションフレームワークを試すことができます-Guice、Roboguice

1
naixx