Gab*_*tin 5 android dagger dagger-2
我DashboardActivity在 viewpager 中有一个包含两个片段 A 和 B的类。每个 Fragment 分别有自己的ViewModel、AViewModel和BViewModel。
现在我正在创建一个Subcomponentfor DashboardActivity,它绑定了两个视图模型实例并通过 将它们注入到片段中ContributesAndroidFragment。
我如何为每个 Fragment 创建一个子组件,以便NavigationController仍然可以满足需要活动(在这种情况下)的依赖项?即如何通过提供片段所附加的活动来创建此子组件?
考虑到这些片段可以添加到应用程序的其他地方,因此附加活动在运行时可能会有所不同。
这是我如何做到的:
应用组件:
@Singleton
@Component(
modules = [
ApplicationModule::class,
AndroidSupportInjectionModule::class,
NetModule::class,
...
ActivityBindings::class
]
)
interface ApplicationComponent : AndroidInjector<MyApp> {
@Component.Factory
interface Factory {
fun create(@BindsInstance application: Application): ApplicationComponent
}
}
Run Code Online (Sandbox Code Playgroud)
活动绑定:
@Module
abstract class ActivityBindings {
@ContributesAndroidInjector(modules = [DashboardModule::class])
@PerActivity
abstract fun dashboardModule(): DashboardActivity
...
}
Run Code Online (Sandbox Code Playgroud)
仪表板模块:
@Module(includes = [CommonActivityModule::class])
abstract class DashboardModule {
@Binds
abstract fun bindsActivity(activity: DashboardActivity): AppCompatActivity
@ContributesAndroidInjector
abstract fun contributeFragmentA(): FragmentA
@ContributesAndroidInjector
abstract fun contributesFragmentB(): FragmentB
@Binds
@IntoMap
@ViewModelKey(BViewModel::class)
@PerActivity
internal abstract fun bViewModel(bViewModel: BViewModel): ViewModel
@Binds
@IntoMap
@ViewModelKey(AViewModel::class)
@PerActivity
internal abstract fun aViewModel(aViewModel: AViewModel): ViewModel
}
Run Code Online (Sandbox Code Playgroud)
通用活动模块:
@Module(includes = [ViewContainerModule::class, ViewModelBuilder::class])
abstract class CommonActivityModule {
@Binds
@ForActivity
abstract fun bindsContext(activity: AppCompatActivity): Context
@Module
companion object {
@Provides
@PerActivity
@JvmStatic
fun provideNavigationController(activity: AppCompatActivity) = NavigationController(activity)
}
}
Run Code Online (Sandbox Code Playgroud)
附注。我需要能够从fragmentAand注入更多片段fragmentB,所以它们也应该充当 AndroidInjectors
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |