【问题标题】:Kotlin extension function with request to rest server请求休息服务器的 Kotlin 扩展功能
【发布时间】:2019-01-08 11:14:03
【问题描述】:

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

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

我想要这样的东西:

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

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

restService.log(log)

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

【问题讨论】:

  • 您可以在 Application 类 中获取您的 restService 对象并从那里静态地用于您的扩展。
  • 你也可以发送你的 restService 作为fun Timber.serverLogDebug(log: String,restService:RestService)的参数

标签: android kotlin dagger-2 kotlin-extension


【解决方案1】:

在您定义扩展函数的文件中,还定义一个“单例”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 来“静态注入”您的服务实例,您可以在其中种植木材DebugTree

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 2012-08-28
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多