我在读这篇文章
Using Hilt in your Android app
。
代码A、代码B和代码C来自
sample project
在解决方案分支中。
我不知道什么时候应该添加Hilt注释。
-
在代码A中,参数
database
属于
fun provideLogDao
被注入,但作者没有添加任何注释,而是添加了参数
appContext
属于
fun provideDatabase
用注释标记
@ApplicationContext
为什么?
-
在代码B中,参数
logDao
属于
class LoggerLocalDataSource
被注入,但作者没有添加任何注释,为什么?
-
在代码C中,我被告知以下内容,为什么参数
activity
属于
class AppNavigatorImpl
添加了注释吗?你知道
ApplicationContext
也是预定义的绑定,但作者添加了注释
@ApplicationContex
t英寸
趣味提供数据库
代码A中。
由于活动容器中提供了AppNavigator实例,因此FragmentActivity已作为预定义绑定可用。
代码A
@InstallIn(SingletonComponent::class)
@Module
object DatabaseModule {
@Provides
@Singleton
fun provideDatabase(@ApplicationContext appContext: Context): AppDatabase {
return Room.databaseBuilder(
appContext,
AppDatabase::class.java,
"logging.db"
).build()
}
@Provides
fun provideLogDao(database: AppDatabase): LogDao {
return database.logDao()
}
}
代码B
class LoggerLocalDataSource @Inject constructor(private val logDao: LogDao) : LoggerDataSource {
...
}
代码C
class AppNavigatorImpl @Inject constructor(private val activity: FragmentActivity) : AppNavigator {
...
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var navigator: AppNavigator
...
}