Android의 Dagger2로 여러 계층의 Component 구조를 만들면...

6902 단어 Dagger2Android

입문


Fragment에서 ViewPager를 사용할 때 발생했습니다.

상술한 바와 같다
  • 상위 Fragment(ViewPagerFragment)는 ViewPager를 레이아웃으로,
  • 상위 Fragment가 등록하고자 하는 하위 Fragment(ChildFragment)의 실례를 생성하고 등록
  • 나는 이런 구성이 자주 있다고 생각한다.
    그렇다면 이번 요구는 아이에게도 부모의 생존기와 동등한 실례를 사용하려는 것이다.
    구체적으로 다음과 같은 요소를 만족시키기 위해 DI 지도를 만들고 싶습니다.
  • 부모 프레임을 생성할 때 실례도 생성
  • 부모 프레임이 버려질 때 실례도 버려진다
  • 하위 프레임을 전환해도 동일한 인스턴스 관찰
  • 일부 인스턴스는 하위 프레임의 라이프 사이클 (하위 프레임당 생성)
  • 이러한 구성을 원하는 이유는 다음과 같은 수요가 있기 때문이다. Parent Fragment와 Child Fragment에서 Shared Presenter를 호출하고 싶기 때문이다.

    실시


    이렇게 설치하면 좋을 것 같아요.
    
    @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와 생명주기가 같은 것을 부모의 ContributesAndroidInjectorParentModuleSharedModule에 추가하고 싶다.하위 라이프 사이클에 등록하려면 ChildBindingModule 에 등록하십시오.또한 ChildBindingModule 중의 작용역을 ChildScope 로 실현할 수 있다.
    이렇게 되면 다음과 같은 생명주기가 있을 것이다.하위 세대의 생명 주기는 부모 세대의 생명 주기 아래에 있는 느낌을 주기 때문에 하위 세대에서SharedModule의 요소에 접근할 때 같은 실례를 볼 수 있다.그리고 부모가 폐기되면 아이도 함께 폐기된다.

    좋은 웹페이지 즐겨찾기