Я думаю, вы должны сказать это иначе. Если я правильно понял, у вас ModelA имеет большую область действия, чем ModelB, это означает, что вы можете иметь ModelB в качестве подкомпонента ModelA с более узкой областью действия.
Так что для этого вам потребуется:
- ConfirmationComponent
//@YourScopeAnnotation
@Subcomponent(modules = [...]) // if it is dependent on any modules
interface ConfirmationComponent {
// needed for dagger to create component
@Subcomponent.Factory
interface Factory {
fun create(): ConfirmationComponent
}
fun inject(yourFragment: Fragment) // fun inject your fragment
}
ПодкомпонентыМодуль
@Module(
subcomponents = [ConfirmationComponent::class]
)
class SubcomponentsModule
В вашем компоненте приложения
//@ApplicationScopeAnnotation I think you can also use @Singleton
@Component(
modules = [NetworkModule::class, SubcomponentsModule::class]
)
interface ApplicationComponent {
fun inject(activity: MainActivity)
fun confirmationComponent(): ConfirmationComponent.Factory
}
Затем просто инициализируйте ApplicationComponent в своем классе Application как обычно
Теперь в вашей основной деятельности введите ModelA, которая должна быть доступна глобально. Также создайте ConfirmationComponent в своей деятельности
@Inject
lateinit var modelA : AModel
lateinit var confirmationComponent: ConfirmationComponent
override fun onCreate(savedInstanceState: Bundle?) {
confirmationComponent = (applicationContext as MyApplication).appComponent
.confirmationComponent()
.create()
modelA = (applicationContext as MyApplication).appComponent.inject(this)
}
Последний шаг, в свой фрагмент вставьте модель B и получите модель A из действия
@Inject
lateinit var modelB: ModelB // inject modelB
lateinit var modelA: ModelA // get ModelA from activity where it was already injected
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(activity as MainActivity).confirmationComponent.inject(this)
modelA = (activity as MainActivity).modelA
}
Надеюсь, это поможет:)