簡體   English   中英

如何使用 Dagger2 為 Android 提供 Room Dao 依賴項?

[英]How to provide Room Dao dependency using Dagger2 for Android?

我的存儲庫傳入一個 Room Persistence 庫。 道 object 作為依賴。 問題是 Dao 是一個接口。 Google 的最新建議是執行以下操作:

// Tells Dagger this is a Dagger module
// Because of @Binds, StorageModule needs to be an abstract class
@Module
abstract class StorageModule {

    // Makes Dagger provide SharedPreferencesStorage when a Storage type is requested
    @Binds
    abstract fun provideStorage(storage: SharedPreferencesStorage): Storage
}

在上面的示例中, SharedPreferencesStorage是用戶創建的接口Storage的實現。 Room dao 依賴項的問題在於實現是由諸如roomDatabase.getDatabase(context).myDao()之類的庫生成的。 最新的 Dagger 版本似乎避免使用通過模塊構造函數傳遞組件依賴項的舊方式。 有沒有辦法使用@Subcomponent.Factory@Component.Factory來做到這一點,或者“舊”方式是對 Room dao 依賴項執行此操作的唯一方法?

您可以嘗試以下方法:

@Module
class DatabaseModule {
    @Provides
    fun provideDaoA(db: MyDb): DaoA = db.daoA()

    @Provides
    fun provideDaoB(db: MyDb): DaoB = db.daoB()
}

class MyRepository @Inject constructor(private val daoA: DaoA) {..}

googlesamples 的另一種方法:

    @JvmStatic
    @Singleton
    @TasksLocalDataSource
    @Provides
    fun provideTasksLocalDataSource(
        database: ToDoDatabase,
        ioDispatcher: CoroutineDispatcher
    ): TasksDataSource {
        return TasksLocalDataSource(
            database.taskDao(), ioDispatcher
        )
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM