首页 > 解决方案 > 请求休息服务器的 Kotlin 扩展功能

问题描述

我正在为 Timber 设置扩展功能。我想要一种将日志发送到我的服务器的功能。

对我来说问题是匕首。我在 dagger 中有 RestService 类的实例,我在整个应用程序中使用它。但是要使用它,我需要在某个地方注入这个 RestService。我不能在构造函数中这样做,因为我没有。

我想要这样的东西:

fun Timber.serverLogDebug(log: String) {
    restService.log(log)
}

大概是这样吗?使用简单的 Timber.d() 这样的机制对我来说会很方便。或者我可以打电话

restService.log(log)

在每个地方。但是我必须到处都有这个实例。

标签: androidkotlindagger-2kotlin-extension

解决方案


在定义扩展函数的文件中,还定义一个“单例”object来保存您的restService实例,为其创建一个 setter,并从 logger 函数中引用它。

private object ServiceHolder {
    var restService: RestService
}

fun Timber.setRestService(restService: RestService) {
    ServiceHolder.restService = restService
}

fun Timber.serverLogDebug(log: String) {
    ServiceHolder.restService.log(log)
}

Timber.setRestService现在,您可以通过调用您在哪里种植 Timber来“静态注入”您的服务实例DebugTree

注意:如果您希望每次登录(或每次记录特定级别的事件)都登录到服务器,您最好创建一个自定义的Timber.Tree.


推荐阅读