Hiltの応用的なインジェクションとモジュール利用
一歩進んだAndroidアプリ開発ができる「Android Jetpack」入門 第18回
本連載は、「Android Studio2で始めるアプリ開発入門」連載、および『Androidアプリ開発の教科書』の続編にあたる内容として、Jetpackを取り上げていきます。前回は、Hiltによる依存性注入(DI)の基礎を紹介しました。今回は、いよいよ最終回です。Hiltによる応用的なインジェクションの方法、およびモジュールの利用方法を紹介します。
インジェクションの別パターン
本連載は、Android Jetpackを紹介しています。長らく続いた本連載も、今回が最終回です。
前回、HiltによるDIの方法としてコンストラクタインジェクションを紹介しました。そのコンストラクタインジェクションが、HiltによるDIの基本です。
今回は、この基本では対応できないパターンを2個紹介することから始めていきます。
なお、今回のサンプルデータはGitHubから参照できます。
フィールドインジェクション
まず、コンストラクタを独自定義できないクラスの場合についてです。アクティビティはその典型です。そこで、前回の図1のパターンからは外れますが、アクティビティからリポジトリを直接利用する場合のインジェクションのコードを紹介します。
これは、Javaではリスト1、Kotlinではリスト2のコードとなります。
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
@Inject
MemoRepository _memoRepository;
:
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var _memoRepository: MemoRepository
:
}
ここでのポイントは、フィールド/プロパティに@Injectアノテーションを付与することです。この仕組みを、フィールドインジェクション(Field Injection)と言います。
ただし、該当フィールド/プロパティは、privateにしてはいけません。なぜならprivateだと外部から注入できなくなってしまうからです。また、Kotlinの場合はlateinit varとなります。
ViewModelのインジェクション
次に、ViewModelのインジェクションです。前回の図1のパターンに話を戻すと、アクティビティ/フラグメントは、ViewModelに依存します。
しかし、そもそもViewModelは直接newするわけではありません。JavaならばViewModelProviderによる生成コード、Kotlinならばby viewModels()による委譲プロパティとして生成します。
そこで、ViewModelに関してはアクティビティ/フラグメント側での生成コードはそのままとして、ViewModelクラスに@HiltViewModelアノテーションを付与するだけで、問題なく注入されるようになります。
そのため、Javaならばリスト3、Kotlinならばリスト4のコードとなります。
@HiltViewModel
public class MainViewModel extends ViewModel {
:
@Inject
public MainViewModel(…) {
:
}
:
}
@HiltViewModel
class MainViewModel
@Inject
constructor(…) : ViewModel() {
:
}
この記事は参考になりましたか?
- 一歩進んだAndroidアプリ開発ができる「Android Jetpack」入門連載記事一覧
-
- Hiltの応用的なインジェクションとモジュール利用
- Hiltによる依存性注入(DI)の概要と基礎
- 型安全なナビゲーションとKotlin DSLによるナビゲーション
- この記事の著者
-
WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
