我正在为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
。