我应该为来自依赖注入的函数参数添加 @Inject 吗?

Should I add @Inject for the function parameter which is from dependency injection?

我正在学习依赖注入,以下代码A来自项目https://github.com/android/sunflower

1:函数providePlantDao的参数appDatabase来自依赖注入,为什么作者不像代码B那样在appDatabase前面加上@Inject?

2:代码C对吗?

代码A

@InstallIn(SingletonComponent::class)
@Module
class DatabaseModule {

    @Singleton
    @Provides
    fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
        return AppDatabase.getInstance(context)
    }

    @Provides
    fun providePlantDao(appDatabase: AppDatabase): PlantDao {
        return appDatabase.plantDao()
    }
     
    ...
}

代码B

@InstallIn(SingletonComponent::class)
@Module
class DatabaseModule {

    @Singleton
    @Provides
    fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
        return AppDatabase.getInstance(context)
    }

    @Provides
    fun providePlantDao(@Inject appDatabase: AppDatabase): PlantDao {
        return appDatabase.plantDao()
    }
     
    ...
}

代码C

@InstallIn(SingletonComponent::class)
@Module
class DatabaseModule {

    @Singleton
    @Provides
    fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
        return AppDatabase.getInstance(context)
    }

    @Provides
    fun providePlantDao(): PlantDao {
        @Inject lateinit var appDatabase: AppDatabase
        return appDatabase.plantDao()
    }
     
    ...
}

只有在想要通过字段注入提供依赖时才需要@Inject。不仅在函数内部是不可能的,而且你必须阅读以下代码:

@InstallIn(SingletonComponent::class) @Module class DatabaseModule

有了这个,你告诉 hilt 你想要创建一个应该安装在 SingleletonComponent Graph 中的新模块。因此,此模块中提供的每个依赖项都可用于整个应用程序。

@Singleton
@Provides
fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase

现在你告诉 hilt,你想提供一个用 @Singleton 注释的依赖项,因此它应该创建一次/始终提供相同的实例。此外,你告诉 hilt,如何创建 AppDatabase 的实例,所以此时 dagger hilt 知道:“哈,现在我知道如何创建 AppDatabase,每次程序员需要 AppDatabase 时,我都会提供同一个实例!"

@Provides
fun providePlantDao(appDatabase: AppDatabase): PlantDao

现在您告诉 hilt 如何提供 PlantDao 的实例。您不需要手动注入 AppDatabase 也不需要编写 @Inject 因为您已经告诉 hilt 如何创建 AppDatabase!