我正在使用Hilt和实现socket。
下面是用于创建仓库的仓库模块。
@Module
@InstallIn(SingletonComponent::class)
object RepositoryModule {
@Provides
fun provideSocketRepository(socket: Socket): SocketRepository {
return SocketRepository(socket)
}
}
字符串
这里的ServiceModule用于将Socket注入SocketRepository。
@Module
@InstallIn(SingletonComponent::class)
object ServiceModule {
@Provides
fun provideSocket(): Socket {
logd("socket: accessToken: ${Common.accessToken}")
val options = IO.Options().apply {
timeout = 30000
reconnection = true
reconnectionDelay = 1000
reconnectionAttempts = 300
transports = arrayOf(WebSocket.NAME)
extraHeaders = mapOf(
"Authorization" to listOf("Bearer ${Common.accessToken}"),
"Content-Type" to listOf("application/json"),
"identity" to listOf("app")
)
}
return IO.socket(UrlType.BACK_OFFICE_SERVER.getUrl(), options)
}
}
型
问题是
Common.accessToken
是全局变量,需要重构,登录后也会更新。但是整个应用进程全局需要Socket,所以时间是在注入之后。如何使用hilt获取最新的accessToken?
1.我应该在某些时候以编程方式连接和断开Socket。如果我使用hilt,它将继续注入到repo类。当我尝试断开它时,示例是否可以存活?例如,socket.disconnect
没有socket = null
,然后socket.connect
在需要连接时重新连接Socket。
1条答案
按热度按时间pbwdgjma1#
在你的例子中,
Socket
不应该被注入,而是被 Package 在一个Manager类中,这个类将处理逻辑并被注入到存储库中。你可以有一个单例
AuthManager
类来控制登录和令牌流(你可以自己定义模块):字符串
然后你的
SocketManager
类有AuthManager
作为依赖项:型
SocketManager
也是Singleton(你可以自己定义模块)最后,在任何你想使用套接字的地方,比如在
Activity
中,注入SocketManager
并根据需要收集套接字:型