请求休息服务器的 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.