Да, в этом случае вы создадите два экземпляра компонента и модуля;Таким образом, у вас будет два экземпляра ObjClass, даже если вы пометили его как @Singleton.Проблема состоит в том, что зависимые области являются только одиночными в области видимости компонента .Это означает, что создание новых экземпляров компонентов приведет к созданию новых экземпляров зависимостей.Посмотрите на пример: Давайте расширим ваш метод void runner :
void runner(){
DaggerInjectorComponent comp = DaggerInjectorComponent.builder....
comp.InjectorModule(new InjectorModule(...));
comp.inject(this) //HERE YOU CREATE AND INJECT YOUR DEPENDENCY
comp.inject(this) // HERE NOTHING WILL HAPPEN, AS DEPENDENCY IS CACHED
}
После запуска этого кода ваш экземпляр не воссоздается, потому что он помечен как @Singleton, поэтому это зависимость по объему, поэтомуКинжал будет знать, что для этого экземпляра компонента требуется инициализировать этот объект только один раз .
Но если мы воссоздадим или создадим компонент, эта логика перестанет работать:
void runner(){
DaggerInjectorComponent comp = DaggerInjectorComponent.builder....
comp.InjectorModule(new InjectorModule(...));
comp.inject(this) //HERE YOU CREATE AND INJECT YOUR DEPENDENCY
comp = null
comp = DaggerInjectorComponent.builder.... // component is recreated
comp.InjectorModule(new InjectorModule(...));
comp.inject(this) // HERE YOUR DEPENDECY IS REINITIALIZED, COMPLETELY NEW OBJECT
}
Как было сказано ранее, все синглеты в кинжале привязаны к экземпляру своего компонента.Если вы создадите новый экземпляр, у него будут собственные синглтоны.Но для вас, как для клиента этой функциональности, у вас будут разные экземпляры.
Чтобы исправить это, вы не должны воссоздавать свой компонент.Например, вы можете хранить его где-нибудь в том месте, которое точно не будет воссоздано.
Надеюсь, это помогло.