Dagger2-自定义作用域-无法使用使用作用域的Dagger 2 Android创建除AppComponent之外的其他组件

问题描述

我的应用程序中有应用程序组件。我想创建另一个具有不同范围的组件,并将该组件与应用程序组件链接

用户登录到应用程序时,我必须构建另一个组件。

下面是我的ApplicationComponent代码

@Singleton
@Component(
    dependencies = [RoomComponent::class],modules = [
        ApplicationModule::class,AndroidInjectionModule::class,SubviewmodelModule::class,LogRoomModule::class,WelcomeActivityModule::class]
)
interface ApplicationComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder
        fun build(): ApplicationComponent
    }

    fun inject(application: Application)

  
    fun roomComponent():RoomComponent

}

下面是我的RoomComponent代码

@RoomScope
@Component(
    modules = [
        viewmodelModule::class,RoomModule::class,HomeActivityModule::class,AppAssistedInjectModule::class,WorkerBindingModule::class
    ]
)

interface RoomComponent {
    fun factory(): AppWorkerFactory

    fun inject(application: Application)
}

因为应用程序组件在SingletonScope下,而Room组件在RoomScope下。因此,我无法链接它。

一旦用户登录到应用程序,我必须构建Room Component,在Application类中,我必须构建Application Component类。

我在“应用程序组件”和“房间组件”下有共同的类,但我没有知道必须为它们使用哪个范围。

我正在Application类中构建Application组件,如下所示:

daggerComponent = DaggerApplicationComponent.builder().application(this).build()
ApplicationInjector.init(this) { application ->
            daggerComponent?.inject(application)
        }

我必须按如下所示在HomeActivity中构建RoomComponent:

daggerComponent = DaggerRoomComponent.builder().application(this).build()
    ApplicationInjector.init(application) { application ->
                daggerComponent?.inject(application)
            }

我尝试将RoomComponent设为SubComponent,在RoomComponent中添加依赖项,但没有任何效果。任何帮助都会对我有很大帮助。

预先感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...