如何在Dagger2中使用应用程序上下文
@Module
class AppModule(private val app: App) {
@Provides
@Singleton
@AppContextQualifier
fun provideApplication(): App = app
}
在类
中object SocketConnection {
private fun listenSocketEvents() {
socket?.on(SocketContent.JOINED, { args ->
//Toast.makeText(context!!,"logout",Toast.LENGTH_LONG).show()
})
}
}
我想在socket监听任何数据时吐司。所以需要提供一个如何在对象类中获取匕首应用程序上下文的上下文。
这可能还是有另一种方法可以实现?
答案 0 :(得分:1)
而不是object SocketConnection {
应该是
@Singleton
class SocketConnection @Inject constructor(
@AppContextQualifier private val app: App
) {
private fun listenSocketEvents() {
socket?.on(SocketContent.JOINED, { args ->
Toast.makeText(app,"logout",Toast.LENGTH_LONG).show()
})
}
}
答案 1 :(得分:0)
使用Dagger 2时,使用Kotlin object
关键字来生成等效的静态单例不是必需的。通过Kotlin object
关键字手动声明单例,Dagger 2可以更灵活地管理范围,您在AppModule
中提供的所有依赖关系将最终成为应用程序范围的单例。
如果您的SocketConnection
打算成为单身人士,请在class
或AppModule
范围内的其他模块中提供@Singleton
:
class SocketConnection constructor(private val app: App) {
private fun listenSocketEvents() {
//
}
}
使用@Inject
注释构造函数,或者如果您想在AppModule
中提供构造函数:
@Module
class AppModule(private val app: App) {
@Provides
@Singleton
fun provideSocketConnection(app: App): SocketConnection =
SocketConection(app)
}