如何在模块中提供应用程序实例

时间:2019-07-09 18:43:23

标签: android dependency-injection android-room dagger

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

  

@ 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中删除构造函数,但没有成功。如果可以提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

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