android - 请求休息服务器的 Kotlin 扩展功能
问题描述
我正在为 Timber 设置扩展功能。我想要一种将日志发送到我的服务器的功能。
对我来说问题是匕首。我在 dagger 中有 RestService 类的实例,我在整个应用程序中使用它。但是要使用它,我需要在某个地方注入这个 RestService。我不能在构造函数中这样做,因为我没有。
我想要这样的东西:
fun Timber.serverLogDebug(log: String) {
restService.log(log)
}
大概是这样吗?使用简单的 Timber.d() 这样的机制对我来说会很方便。或者我可以打电话
restService.log(log)
在每个地方。但是我必须到处都有这个实例。
解决方案
在定义扩展函数的文件中,还定义一个“单例”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
.
推荐阅读
- css - CSS在鼠标悬停后折射图像和扭曲
- gitlab-ci - Blackduck Synopsys Yarn Detector 找不到项目版本名称
- typescript - 获取与 Solana 钱包地址关联的资产列表
- laravel - 在同一服务中有多个 laravel 站点时出错
- java - 找到从给定字符串生成的全部可能方法
- html - 为什么@media 屏幕 CSS 不起作用?
- macos - MARS 模拟器不工作不断打开不同的文件
- python - seaborn implot 将数据集合并到一个图中
- python - 使用 Beautiful Soup/Requests 下载 HTML 中 URL 不完整的 PDF
- azure - 使用 terraform 在 Azure APIM api 中创建新操作