많은 경우에서 클래스의 매개변수로 그 클래스를 부르는 액티비티, 혹은 애플리케이션의 context를 사용해야 될 때가 있다.
하지만 서로 다른 액티비티에서 하나의 클래스를 hilt를 통해서 부른다면 그 클래스가 매개변수로 가지는 context도 달라져야 할 것이기 때문에 context도 주입을 하면 좋을 것 같다.
다행히 context 역시 주입을 할 수 있다!!
대표적으로 applicationContext와 activityContext를 쓰게 되는데, 각각의 애너테이션이
@ApplicationContext
, @ActivityContext
로 모두 있다.
class DatabaseAdapter @Inject constructor(
@ActivityContext private val context: Context, var databaseService: DatabaseService
) {
fun log(message: String) {
Log.d(TAG, "log: DatabaseAdapter message : $message")
databaseService.log(message)
Log.d(TAG, "log: context available ${context}")
}
}
위 처럼 adapter를 만들어 구성하면, 이 adapter를 부르는 액티비티의 context를 자동으로 쓸 수 있게 해준다.
@Inject
lateinit var databaseAdapter : DatabaseAdapter
...
databaseAdapter.log("Hello Hilt")
주의할 점
context는 액티비티 생성 소멸과 밀접한 관계가 있다. 화면 회전과 같은 이벤트가 발생하면 context도 destroy 되고 재생성되기 때문에 context 사용은 항상 조심해야 한다.