匕首范围问题
Dagger Scope issue
我正在尝试设置 dagger 以提供数据模块,但我一直 运行 进入此错误:
错误:无法确定@Modules 的范围。您的意思是改为确定方法的范围吗?
@javax.inject.Singleton()
^
这是罪魁祸首模块:
package com.bottlerocket.dependancyinjection.modules
import android.content.Context
import androidx.room.Room
import com.bottlerocket.dependancyinjection.DI
import com.data.api.BottleRocketApi
import com.data.cache.StoreCache
import com.data.database.CacheDataStoreObject
import com.data.database.RemoteStoreDataObject
import com.data.database.StoreDatabase
import com.data.repository.StoreRepositoryImplementation
import dagger.Module
import dagger.Provides
import interfaces.StoresRepository
import javax.inject.Named
import javax.inject.Singleton
@Module
@Singleton
class DataModule {
@Singleton
@Provides
fun provideRoomDatabase(context: Context): StoreDatabase {
return Room.databaseBuilder(
context,
StoreDatabase::class.java,
"stores_db"
).build()
}
@Provides
@Singleton
fun provideStoreRepository(
api: BottleRocketApi,
@Named(DI.inMemoryCache) cache: StoreCache
): StoresRepository {
val cachedMoviesDataStore = CacheDataStoreObject(cache)
val remoteMoviesDataStore = RemoteStoreDataObject(api)
return StoreRepositoryImplementation(cachedMoviesDataStore, remoteMoviesDataStore)
}
}
如错误所示,您不能使用 @Singleton
注释模块,只能使用函数。所以你所要做的就是从你的模块中删除注释。
改变
@Module
@Singleton
class DataModule {
}
和
@Module
class DataModule {
}
此检查是在最新版本的 Dagger 中引入的。
我正在尝试设置 dagger 以提供数据模块,但我一直 运行 进入此错误:
错误:无法确定@Modules 的范围。您的意思是改为确定方法的范围吗? @javax.inject.Singleton() ^
这是罪魁祸首模块:
package com.bottlerocket.dependancyinjection.modules
import android.content.Context
import androidx.room.Room
import com.bottlerocket.dependancyinjection.DI
import com.data.api.BottleRocketApi
import com.data.cache.StoreCache
import com.data.database.CacheDataStoreObject
import com.data.database.RemoteStoreDataObject
import com.data.database.StoreDatabase
import com.data.repository.StoreRepositoryImplementation
import dagger.Module
import dagger.Provides
import interfaces.StoresRepository
import javax.inject.Named
import javax.inject.Singleton
@Module
@Singleton
class DataModule {
@Singleton
@Provides
fun provideRoomDatabase(context: Context): StoreDatabase {
return Room.databaseBuilder(
context,
StoreDatabase::class.java,
"stores_db"
).build()
}
@Provides
@Singleton
fun provideStoreRepository(
api: BottleRocketApi,
@Named(DI.inMemoryCache) cache: StoreCache
): StoresRepository {
val cachedMoviesDataStore = CacheDataStoreObject(cache)
val remoteMoviesDataStore = RemoteStoreDataObject(api)
return StoreRepositoryImplementation(cachedMoviesDataStore, remoteMoviesDataStore)
}
}
如错误所示,您不能使用 @Singleton
注释模块,只能使用函数。所以你所要做的就是从你的模块中删除注释。
改变
@Module
@Singleton
class DataModule {
}
和
@Module
class DataModule {
}
此检查是在最新版本的 Dagger 中引入的。