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

我的问题是匕首。我在匕首中有RestService类的实例,并且在整个应用程序中都在使用它。
但是要使用它,我需要在此RestService的某个位置注入。我没有构造函数,因为我没有。

我想要这样的东西:

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


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

restService.log(log)


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

最佳答案

在定义扩展功能的文件中,还定义一个“单个” 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)
}


现在,您可以通过调用Timber.setRestService在您的木材DebugTree种植位置“静态注入”您的服务实例。

注意:如果要在每次登录时(或每次记录特定级别的事件时)登录服务器,最好创建自定义Timber.Tree

08-16 19:18