モジュールとプロバイダー
依存関係の作成方法をHiltに伝えます
「モジュールとプロバイダー」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
Hilt に構築方法を伝える
コンストラクタに @Inject のアノテーションを付けると、Hilt はクラスを自動的に構築できます。ただし、インターフェースや自分が所有していない型については、Module を使って Hilt に方法を教える必要があります。
コンストラクタ注入
最も簡単な方法は、コンストラクタにアノテーションを付けることです。これで Hilt は構築方法を認識します。
class Analytics @Inject constructor(
private val api: ApiService
)コンストラクタ注入だけでは不十分な場合
次のもののコンストラクタにはアノテーションを付けられません:
- インターフェース(コンストラクタがありません)
- ライブラリのクラス(Retrofit、Room など)
これらにはモジュールが必要です。
モジュールを定義する
@Module は、Hilt に型の提供方法を伝えます。@InstallIn は、所属するコンポーネント(スコープ)を宣言します。
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
object NetworkModuleライブラリの型に @Provides を使う
依存関係を構築して返す関数に @Provides を付けます。その型が必要になったとき、Hilt がこの関数を呼び出します。
@Provides
@Singleton
fun provideRetrofit(): Retrofit =
Retrofit.Builder()
.baseUrl("https://api.example.com/")
.build()プロバイダは相互に依存できる
@Provides 関数はパラメータを受け取れます。Hilt はそれらをグラフから提供します。
@Provides
fun provideApi(retrofit: Retrofit): ApiService =
retrofit.create(ApiService::class.java)インターフェースに @Binds を使う
インターフェースを実装にバインドするには、abstract モジュールで @Binds を使用します。単純なバインドでは @Provides より効率的です。
@Module
@InstallIn(SingletonComponent::class)
abstract class RepoModule {
@Binds
abstract fun bindRepo(
impl: NetworkUserRepository
): UserRepository
}@Provides と @Binds の比較
- @Binds — コンストラクタ注入が可能な実装にインターフェースを対応付けるだけの場合に使用します。抽象関数です。
- @Provides — ビルダーなど、オブジェクトを構築するためにコードの実行が必要な場合に使用します。
@Singleton でスコープを設定する
プロバイダに @Singleton のようなスコープを付けると、Hilt は毎回新しいインスタンスを構築せず、アプリ全体で 1 つのインスタンスを再利用します。
スコープとコンポーネントを一致させる
スコープはコンポーネントと一致させる必要があります。@Singleton は SingletonComponent、@ActivityScoped は ActivityComponent に対応し、そのほかも同様です。
モジュールのまとめ
@Moduleと@InstallInで、バインディングを配置する場所を定義します。@Providesはライブラリの型や複雑な型を構築します。@Bindsはインターフェースを実装に対応付けます。
クイックチェック
モジュールとプロバイダについて理解度を確認しましょう。
まとめ
学んだこと:
- クラスを自分で所有している場合は、コンストラクタ注入を使用できます。
@Moduleと@InstallInにより、Hilt に他の型の提供方法を伝えます。@Providesはライブラリや複雑なオブジェクトを構築し、@Bindsはインターフェースを対応付けます。@Singletonなどのスコープを対応するコンポーネントに合わせます。
よくある質問
「モジュールとプロバイダー」レッスンは無料ですか?
はい。「モジュールとプロバイダー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「モジュールとプロバイダー」で何を学びますか?
依存関係の作成方法をHiltに伝えます ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「モジュールとプロバイダー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 依存性注入を使う理由
- Hiltを設定する
- モジュールとプロバイダー
- ViewModelに注入する