0Pricing
Android Academy · レッスン

モジュールとプロバイダー

依存関係の作成方法を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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 依存性注入を使う理由
  2. Hiltを設定する
  3. モジュールとプロバイダー
  4. ViewModelに注入する
← Android Academyに戻る