В моем проекте Android у меня есть два модуля проекта, модуль main
и модуль core
.
В основном модуле у меня есть компонент кинжала, MainComponent
:
// it has dependency on CoreComponent
@Component(modules = [MyModule::class], dependencies = [CoreComponent::class])
@FeatureScope
interface MainComponent {
fun inject(mainActivity: MainActivity)
}
Как вы можете видеть выше, MainComponent
зависит от CoreComponent
. Он также имеет пользовательскую аннотацию области действия @FeatureScope
.
В модуле core
У меня есть еще один компонент кинжала, который называется CoreComponent
:
@Component(modules = [CoreModule::class])
@Singleton
interface CoreComponent {
fun getExpensiveObject(): ExpensiveObject
}
@Module
class CoreModule {
@Provides
@Singleton
fun provideExpObj(): ExpensiveObject = ExpensiveObject()
}
. CoreComponent
аннотируется определенным кинжалом@Singleton
scope.
Я создаю основной компонент в onCreate()
из Application
класса:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
//build main component along with core component
mainComponent = DaggerMainComponent
.builder()
.myModule(MyModule())
.coreComponent(DaggerCoreComponent.builder().build())
.build()
}
}
CoreComponent
, а его провайдеры аннотируются @Singleton
, тогда как MainComponent
и ее провайдеры аннотированы пользовательской аннотацией @FeatureScope
.
Вопрос первый: С точки зрения времени жизни код означает, что время жизни объектов в MainComponent
короче, чем вCoreComponent
из-за аннотаций области действия (@Singleton
в CoreComponent и @FeatureScope
в MainComponent)?
Вопрос второй: Поскольку компоненты встроены в Application
класс onCreate()
что является точкой входа приложения во время выполнения, я прав, что хотя компоненты в двух модулях проекта аннотируются различными областями аннотации, их объекты в основном имеют то же время жизни, что и все приложение во время выполнения?
(Iзадать эти вопросы, потому что му вас есть понимание, что область, определенная кинжалом @Singleton
, имеет самый длинный срок службы, но я путаюсь с моим проектом)