Dagger2 使用参数注入类(使用 Room)

林戈

我在用Dagger2. RoomDatabase用于数据库访问。

我的房间设置:

道的

interface noteDao()
interface noteTypeDao()
interface userDao()

笔记库

@Singleton
class NoteRepository @Inject constructor(
    private val noteDao: NoteDao,
    private val noteTypeDao: NoteTypeDao,
    private val userDao: UserDao
) {

}

应用数据库

@Database(entities = [Note::class, User::class, NoteType::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun noteDao(): NoteDao
    abstract fun userDao(): UserDao
    abstract fun noteTypeDao(): NoteTypeDao

    companion object {
        @Volatile
        private var INSTANCE: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase {
            val tempInstance = INSTANCE
            if (tempInstance != null) {
                return tempInstance
            }
            synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "NoteDatabase"
                ).build()
                INSTANCE = instance
                return instance
            }
        }
    }
}

匕首 2 设置:

应用模块

@Module
class AppModule {

    @Provides
    fun provideNoteRepository(app: Application): NoteRepository {
        return NoteRepository(
            AppDatabase.getDatabase(app).noteDao(),
            AppDatabase.getDatabase(app).noteTypeDao(),
            AppDatabase.getDatabase(app).userDao()
        )
    }

    @Provides
    fun provideApplication(): Application {
        return Application()
    }

}

应用组件

@Component(modules = [AppModule::class])
interface AppComponent {
    fun inject(app: MainActivity)
}

AppDatabase在行中得到一个 NullPointerExeption int context.applicationContext任何建议如何解决问题?AppDatabase 似乎没有从Dagger2.

zsmb13

Application是一个框架类,你不能仅仅通过调用它的构造函数来实例化它。相反,您需要将框架为您实例化的应用程序传递到您的模块中,并提供:

@Module
class AppModule(val application: Application) { 
    ...

    @Provides
    fun provideApplication(): Application {
        return application
    }
}

现在,如果您AppComponent之前像这样创建您的应用程序,则在您的应用程序中onCreate(大概,因为这是通常的做法):

override fun onCreate() {
    injector = DaggerAppComponent.create()
}    

你必须用这样的东西替换它,将你的应用程序实例传递给模块,以便它可以提供它:

override fun onCreate() {
    injector = DaggerAppComponent.builder()
            .appModule(appModule(this))
            .build()
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Dagger2不生成Dagger *类

来自分类Dev

使用dagger2进行依赖项注入时是否可以只注入超类?

来自分类Dev

使用Dagger2进行内部依赖注入

来自分类Dev

Dagger2没有注入领域

来自分类Dev

Dagger2 和嵌套子注入

来自分类Dev

Android Dagger2 依赖注入

来自分类Dev

未注入 Android Dagger2 字段

来自分类Dev

Dagger2 无法在注入的类中注入字段

来自分类Dev

在AndroidTest类中使用dagger2注入OkHttp以使OkHttp3IdlingResource再生

来自分类Dev

在AndroidTest类中使用dagger2注入OkHttp以使OkHttp3IdlingResource再生

来自分类Dev

Dagger2:注入 RxJava2 函数

来自分类Dev

Dagger2:场注入,其中也有注入场

来自分类Dev

Dagger2子注入项为空

来自分类Dev

android dagger2注入错误无法投射

来自分类Dev

Dagger2 构造函数注入不起作用

来自分类Dev

如何测试使用Retrofit和Dagger2的REST API

来自分类Dev

Dao在使用Dagger2时为空

来自分类Dev

我如何使用Dagger2和CursorLoader

来自分类Dev

使用 Dagger2 和 setRetainInstance(true) 时获取 NullPointException;

来自分类Dev

如何在Android中使用Dagger2依赖注入和Robolectric进行测试?

来自分类Dev

如何使用Dagger2将依赖项注入任何类型的对象中?

来自分类Dev

无法在Java中的Android使用dagger2注入的片段依赖

来自分类Dev

mvvm与ViewModelFactory一起使用dagger2,不了解默认注入

来自分类Dev

如何使用Dagger2在ViewModel构造函数中注入WorkManager实例?

来自分类Dev

如何在Dagger2 android中为ViewModel使用构造函数注入?

来自分类Dev

可以使用 dagger2 注入内容视图吗

来自分类Dev

使用dagger2创建模型时如何将模型注入演示者?

来自分类Dev

如何处理应用程序后台以恢复使用 Dagger2 注入的 Exoplayer?

来自分类Dev

如何解决错误:使用Dagger2进行翻新时出现[Dagger / MissingBinding]

Related 相关文章

  1. 1

    Dagger2不生成Dagger *类

  2. 2

    使用dagger2进行依赖项注入时是否可以只注入超类?

  3. 3

    使用Dagger2进行内部依赖注入

  4. 4

    Dagger2没有注入领域

  5. 5

    Dagger2 和嵌套子注入

  6. 6

    Android Dagger2 依赖注入

  7. 7

    未注入 Android Dagger2 字段

  8. 8

    Dagger2 无法在注入的类中注入字段

  9. 9

    在AndroidTest类中使用dagger2注入OkHttp以使OkHttp3IdlingResource再生

  10. 10

    在AndroidTest类中使用dagger2注入OkHttp以使OkHttp3IdlingResource再生

  11. 11

    Dagger2:注入 RxJava2 函数

  12. 12

    Dagger2:场注入,其中也有注入场

  13. 13

    Dagger2子注入项为空

  14. 14

    android dagger2注入错误无法投射

  15. 15

    Dagger2 构造函数注入不起作用

  16. 16

    如何测试使用Retrofit和Dagger2的REST API

  17. 17

    Dao在使用Dagger2时为空

  18. 18

    我如何使用Dagger2和CursorLoader

  19. 19

    使用 Dagger2 和 setRetainInstance(true) 时获取 NullPointException;

  20. 20

    如何在Android中使用Dagger2依赖注入和Robolectric进行测试?

  21. 21

    如何使用Dagger2将依赖项注入任何类型的对象中?

  22. 22

    无法在Java中的Android使用dagger2注入的片段依赖

  23. 23

    mvvm与ViewModelFactory一起使用dagger2,不了解默认注入

  24. 24

    如何使用Dagger2在ViewModel构造函数中注入WorkManager实例?

  25. 25

    如何在Dagger2 android中为ViewModel使用构造函数注入?

  26. 26

    可以使用 dagger2 注入内容视图吗

  27. 27

    使用dagger2创建模型时如何将模型注入演示者?

  28. 28

    如何处理应用程序后台以恢复使用 Dagger2 注入的 Exoplayer?

  29. 29

    如何解决错误:使用Dagger2进行翻新时出现[Dagger / MissingBinding]

热门标签

归档