오늘도 더 나은 코드를 작성하였습니까?

Android Code Lab(Hilt) 정리2 본문

DI/Hilt

Android Code Lab(Hilt) 정리2

hik14 2021. 12. 23. 19:53

각각의 SubComponent를 Hilt로 이전한다.

 

LoginComponent 이전하기.

 

LoginComponent를 직접 만들어 LoginActivity에서 사용하는 대신 Hilt에서 자동으로 처리한다.

 

Hilt가 LoginActivity의 Component를 생성하고 삽입하려면 Activity에 @AndroidEntryPoint 주석을 추가

@AndroidEntryPoint
class LoginActivity : AppCompatActivity() {

    //...
}

LoginActivity를 Hilt로 이전하기 위해 @AndroidEntryPoint만 추가하면 됩니다.

Hilt가 기존의 Dagger Component에 접근하는 코드를 자동으로 생성한다.

 

LoginEntryPoint Interface와 EntryPoint를 통해 Component에 접근하는 로직을 삭제한다.

 

더이상 사용하지 않는 LoginComponent를 삭제합니다.

 

AppSubcomponent.kt

@InstallIn(ApplicationComponent::class)
@Module(
    subcomponents = [
        RegistrationComponent::class,
        UserComponent::class
    ]
)
class AppSubcomponents

 

RegistrationComponent 이전하기.

 

RegistrationActivity.kt

//Remove
//@InstallIn(ApplicationComponent::class)
//@EntryPoint
//interface RegistrationEntryPoint {
//    fun registrationComponent(): RegistrationComponent.Factory
//}

override fun onCreate(savedInstanceState: Bundle?) {
    //Remove
    //val entryPoint = EntryPoints.get(applicationContext, RegistrationEntryPoint::class.java)
    //registrationComponent = entryPoint.registrationComponent().create()

    registrationComponent.inject(this)
    super.onCreate(savedInstanceState)
    //..
}
// Remove
// lateinit var registrationComponent: RegistrationComponent

override fun onCreate(savedInstanceState: Bundle?) {
    //Remove
    //registrationComponent.inject(this)
    super.onCreate(savedInstanceState)

    //..
}

 

RegistrationActivity에서 한 것과 비슷하게 EnterDetailsFragment에 @AndroidEntryPoint 주석을 추가하고, 

onAttach 함수(기존에 Fragment에서 Dagger의 Component에 접근하던 위치)를 제거한다. 

AppSubcomponent.kt

@InstallIn(SingletonComponent::class)
@Module(
    subcomponents = [
        UserComponent::class
    ]
)
@DisableInstallInCheck
class AppSubcomponents

Registration는 자체 범위 ActivityScope를 선언하고 사용합니다.

Scope는 종속 항목의 LifeCycle를 제어합니다.

 

 ActivityScope가 Dagger에 RegistrationActivity로 시작-종료 내에서 동일한 RegistrationViewModel 인스턴스를 주입 받는다.

Hilt는 이를 지원할 수 있도록 기본 제공되는  LifeCycle Scope 를 제공합니다.

 

@ActivityScope 주석을 Hilt에서 기본제공하는 @ActivityScoped로 변경.

하고 @ActivityScope class를 삭제한다.

 

'DI > Hilt' 카테고리의 다른 글

Android Code Lab(Hilt) 정리3  (0) 2021.12.23
Android Code Lab(Hilt) 정리1  (0) 2021.12.23
Hilt을 사용한 종속성 주입  (0) 2021.05.06