Android의 Dagger2로 여러 계층의 Component 구조를 만들면...
입문
Fragment에서 ViewPager를 사용할 때 발생했습니다.
상술한 바와 같다
그렇다면 이번 요구는 아이에게도 부모의 생존기와 동등한 실례를 사용하려는 것이다.
구체적으로 다음과 같은 요소를 만족시키기 위해 DI 지도를 만들고 싶습니다.
실시
이렇게 설치하면 좋을 것 같아요.
@AppScope
@Component(modules = [
BindingModule::class:)
interface AppComponent {
/*省略*/
}
@Module
abstract class BindingModule {
@ActivityScope
@ContributesAndroidInjector(modules = [ParentModule::class, SharedModule::class, ChildBindingModule::class])
abstract fun bindingViewPagerFragment(): ViewPagerFragment
}
@Module
class ParentModule {
@ParentScope
@Provides
internal fun provideParentPresenter(..): ParentPresenter =
ParentPresenterImpl(..)
}
@Module
class ParentModule {
@ParentScope
@Provides
internal fun provideSharedPresenter(..): SharedPresenter =
SharedPresenterImpl(..)
}
@Module
abstract class ChildBindingModule {
@ChildScope
@ContributesAndroidInjector(modules = [(Child1Module::class)])
abstract fun bindingChild1Fragment(): Child1Fragment
@ChildScope
@ContributesAndroidInjector(modules = [(Child2Module::class)])
abstract fun bindingChild2Fragment(): Child2Fragment
/*以下省略*/
}
@Module
class Child1Module {
@ChildScope
@Provides
internal fun provideChild1Presenter(..): Child1Presenter =
Child1PresenterImpl(..)
}
설치 지점
미소는 다음과 같다ChildBindingModule
.@Module
abstract class BindingModule {
@ActivityScope
@ContributesAndroidInjector(modules = [ParentModule::class, SharedModule::class, ChildBindingModule::class])
abstract fun bindingParentFragment(): ParentFragment
}
부모의 Fragment와 생명주기가 같은 것을 부모의 ContributesAndroidInjector
ParentModule
와SharedModule
에 추가하고 싶다.하위 라이프 사이클에 등록하려면 ChildBindingModule
에 등록하십시오.또한 ChildBindingModule
중의 작용역을 ChildScope
로 실현할 수 있다.
이렇게 되면 다음과 같은 생명주기가 있을 것이다.하위 세대의 생명 주기는 부모 세대의 생명 주기 아래에 있는 느낌을 주기 때문에 하위 세대에서SharedModule의 요소에 접근할 때 같은 실례를 볼 수 있다.그리고 부모가 폐기되면 아이도 함께 폐기된다.
Reference
이 문제에 관하여(Android의 Dagger2로 여러 계층의 Component 구조를 만들면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k_keisuke/items/f3e3e45b1acd650ac655
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@AppScope
@Component(modules = [
BindingModule::class:)
interface AppComponent {
/*省略*/
}
@Module
abstract class BindingModule {
@ActivityScope
@ContributesAndroidInjector(modules = [ParentModule::class, SharedModule::class, ChildBindingModule::class])
abstract fun bindingViewPagerFragment(): ViewPagerFragment
}
@Module
class ParentModule {
@ParentScope
@Provides
internal fun provideParentPresenter(..): ParentPresenter =
ParentPresenterImpl(..)
}
@Module
class ParentModule {
@ParentScope
@Provides
internal fun provideSharedPresenter(..): SharedPresenter =
SharedPresenterImpl(..)
}
@Module
abstract class ChildBindingModule {
@ChildScope
@ContributesAndroidInjector(modules = [(Child1Module::class)])
abstract fun bindingChild1Fragment(): Child1Fragment
@ChildScope
@ContributesAndroidInjector(modules = [(Child2Module::class)])
abstract fun bindingChild2Fragment(): Child2Fragment
/*以下省略*/
}
@Module
class Child1Module {
@ChildScope
@Provides
internal fun provideChild1Presenter(..): Child1Presenter =
Child1PresenterImpl(..)
}
@Module
abstract class BindingModule {
@ActivityScope
@ContributesAndroidInjector(modules = [ParentModule::class, SharedModule::class, ChildBindingModule::class])
abstract fun bindingParentFragment(): ParentFragment
}
Reference
이 문제에 관하여(Android의 Dagger2로 여러 계층의 Component 구조를 만들면...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k_keisuke/items/f3e3e45b1acd650ac655텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)