请求休息服务器的 Kotlin 扩展功能
Kotlin extension function with request to rest server
我正在为 Timber 设置扩展功能。我想要一种将日志发送到我的服务器的功能。
我的问题是 Dagger。我在匕首中有 RestService class 的实例,我在我的整个应用程序中使用它。
但是要使用它,我需要在某个地方注入这个 RestService。我不能在构造函数中这样做,因为我没有。
我想要这样的东西:
fun Timber.serverLogDebug(log: String) {
restService.log(log)
}
有可能吗?使用简单的 Timber.d() 这样的机制对我来说会很方便。
或者我可以打电话给
restService.log(log)
在每个地方。但是我必须到处都有这个实例。
在你定义扩展函数的文件中,也定义一个"singleton" object
来保存你的restService
实例,为它创建一个setter,并引用它来自记录器功能。
private object ServiceHolder {
var restService: RestService
}
fun Timber.setRestService(restService: RestService) {
ServiceHolder.restService = restService
}
fun Timber.serverLogDebug(log: String) {
ServiceHolder.restService.log(log)
}
现在您可以 "statically inject" 您的服务实例,方法是调用 Timber.setRestService
您种植木材的地方 DebugTree
。
注意:如果您想在每次登录时(或每次登录特定级别的事件时)都登录到服务器,您最好创建自定义 Timber.Tree
.
我正在为 Timber 设置扩展功能。我想要一种将日志发送到我的服务器的功能。
我的问题是 Dagger。我在匕首中有 RestService class 的实例,我在我的整个应用程序中使用它。 但是要使用它,我需要在某个地方注入这个 RestService。我不能在构造函数中这样做,因为我没有。
我想要这样的东西:
fun Timber.serverLogDebug(log: String) {
restService.log(log)
}
有可能吗?使用简单的 Timber.d() 这样的机制对我来说会很方便。 或者我可以打电话给
restService.log(log)
在每个地方。但是我必须到处都有这个实例。
在你定义扩展函数的文件中,也定义一个"singleton" object
来保存你的restService
实例,为它创建一个setter,并引用它来自记录器功能。
private object ServiceHolder {
var restService: RestService
}
fun Timber.setRestService(restService: RestService) {
ServiceHolder.restService = restService
}
fun Timber.serverLogDebug(log: String) {
ServiceHolder.restService.log(log)
}
现在您可以 "statically inject" 您的服务实例,方法是调用 Timber.setRestService
您种植木材的地方 DebugTree
。
注意:如果您想在每次登录时(或每次登录特定级别的事件时)都登录到服务器,您最好创建自定义 Timber.Tree
.