Depnedency Inejectionの活用
前回の記事でHiltを導入しました。
今回の記事ではHiltを使ってInjectするように組んでいきます。
目次
通信層をInjectする
実際にInjectしてみましょう。
現在のところ、このアプリの機能はJsonPlaceHolderと通信することだけです。
なので、JsonPlaceHolderと通信する機能をInjectするように修正します。
Modules
InjectするインスタンスはModuleに定義します。
@Module
@InstallIn(SingletonComponent::class)
object ApplicationModule {
/**
* Retrofitのインスタスを供給する
* urlはhttps://jsonplaceholder.typicode.com/、converterはGson
*/
@Provides
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
}
/**
* RetrofitのインスタンスからJsonPlaceHolderAPIインターフェイスのインスタンスを生成し供給する
*/
@Provides
fun provideJsonPlaceHolderAPI(
retrofit: Retrofit
): JsonPlaceHolderAPI{
return retrofit.create<JsonPlaceHolderAPI>()
}
}
@Inject
MainActivity
のjsonPlaceHolder
をInjectするように修正します。
- 以下は削除する
@AndroidEntryPoint class MainActivity : ComponentActivity() { ... // ここから削除 private val retrofit = Retrofit.Builder() .baseUrl("https://jsonplaceholder.typicode.com/") .addConverterFactory(GsonConverterFactory.create()) .build() // ここまで削除 ... }
- jsonPlaceHolderAPIをInjectするよう修正
@AndroidEntryPoint class MainActivity : ComponentActivity() { ... @Inject lateinit var jsonPlaceHolderAPI: JsonPlaceHolderAPI ... }
できあがり
MainActivityがだいぶすっきりしました。
リポジトリ
https://github.com/aburagirio/retrofitExample.git
ブランチpart3
をcheck outしてください。