2021. 1. 20. 19:40ㆍAndroid/DI(dependency injection)
@Inject 주석을 사용하여 필드 삽입을 실행합니다.
" 아래 analytics 변수는 initializer 하지 않았다. 일반적으로는 아래 로그는
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property analytics has not been initialized
와 같은 에러를 호출하며 죽어야 정상이나
@Inject 주석을 사용하므로 인해 자동으로 initialized되어 죽지않고 "test" 라는 로그를 출력해준다. "
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var analytics: AnalyticsAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
Log.i("MainActivity","analytics.hello = ${analytics.hello}")
}
}
class AnalyticsAdapter @Inject constructor(
private val service: AnalyticsService
) {
var hello: String = "test"
}
@Module, @InstallIn
Hilt 모듈은 @Module로 주석이 지정된 클래스입니다. Dagger 모듈과 마찬가지로 이 모듈은 특정 유형의 인스턴스를 제공하는 방법을 Hilt에 알려줍니다. 그러나 Dagger 모듈과는 달리, Hilt 모듈에 @InstallIn 주석을 지정하여 각 모듈을 사용하거나 설치할 Android 클래스를 Hilt에 알려야 합니다.
@Binds로 주석이 지정된 추상 함수를 생성하여 Hilt에 결합 정보를 제공합니다.
https://developer.android.com/training/dependency-injection/hilt-android?hl=ko#inject-interfaces
추상 함수 bindAnalyticsService 와 생성자 service가 결갑 됨
@InstallIn(ActivityComponent::class) 이 주석은 AnalyticsModule의 모든 종속 항목을 앱의 모든 활동에서 사용할 수 있음을 의미합니다.
" @Inject으로 Activity외 파일에서는 자동 initialized 되지 않는다 "
class AnalyticsAdapter @Inject constructor(
private val service: AnalyticsService
) { ... }
interface AnalyticsService {
fun analyticsMethods()
}
// Constructor-injected, because Hilt needs to know how to
// provide instances of AnalyticsServiceImpl, too.
class AnalyticsServiceImpl @Inject constructor(
...
) : AnalyticsService { ... }
@Module
@InstallIn(ActivityComponent::class)
abstract class AnalyticsModule {
@Binds
abstract fun bindAnalyticsService(
analyticsServiceImpl: AnalyticsServiceImpl
): AnalyticsService
}
'Android > DI(dependency injection)' 카테고리의 다른 글
hilt - @ApplicationContext, @ActivityContext, @EntryPoin (0) | 2021.01.21 |
---|---|
Hilt - @Provides, @Qualifier (0) | 2021.01.21 |
Hilt를 사용한 종속 항목 삽입 (0) | 2021.01.20 |
수동 종속성 삽입 (0) | 2021.01.20 |
Android의 종속 항목 삽입 (0) | 2021.01.19 |