【问题标题】:How do i provide application instance in a module如何在模块中提供应用程序实例
【发布时间】:2019-07-09 18:43:23
【问题描述】:

由于以下错误,我无法构建我的应用程序。

@Component.Builder 缺少所需模块或组件的设置器

我正在使用

implementation "androidx.room:room-runtime:2.1.0"

kapt "androidx.room:room-compiler:2.1.0"

我的应用 RoomModul 如下所示:

@Module
class RoomModule(application: Application) {

@Singleton
private var logDatabase : LogDatabase =
    Room.databaseBuilder(application, LogDatabase::class.java, "log-db").build()

@Singleton
@Provides
fun providesLogDatabase() : LogDatabase {
    return logDatabase
}

@Singleton
@Provides
fun providesLogDao() : LogDao {
    return logDatabase.getLogDao()
}

@Singleton
@Provides
fun providesLogRepository(logDao: LogDao) : LogRepository {
    return LogDataSource(logDao)
}
}

我的 AppComponent 看起来像这样:

@Singleton
@Component(
modules = [
    AndroidInjectionModule::class,
    AppModule::class,
    MainActivityModule::class,
    RoomModule::class
])
interface AppComponent {
@Component.Builder
interface Builder {
    @BindsInstance
    fun application(application: Application): Builder

    fun build(): AppComponent
}

fun inject(logApplication: LogApplication)
}

所以我的 RoomModule 需要应用程序来提供房间数据库。但我不断收到错误消息。

我认为@BindsInstance 应该为我的模块提供应用程序实例。我还尝试从我的 RoomModule 中删除构造函数,但没有成功。如果我能提供更多信息,请告诉我。

【问题讨论】:

    标签: android dependency-injection android-room dagger


    【解决方案1】:
    Try to use this
    @Module
    class RoomModule()
    {
     @Singleton
     @Provides
     private var logDatabase(application: Application) : LogDatabase =
     Room.databaseBuilder(application, LogDatabase::class.java, "log-db").build()
    ----
    }
    
    And Remove this line ---> fun inject(logApplication: LogApplication)
    from AppComponent
    

    【讨论】:

    • 谢谢,我会试试这个。目前我设法通过将fun roomModule(roomModule: RoomModule): Builder 添加到我的Builder 并在构建appComponent 上添加.roomModule(RoomModule(application)) 来完成它。但这感觉不对,我认为这不应该是这样做的方式。
    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多