Функция расширения Kotlin с запросом на отдых сервера

1

Я настраиваю функцию расширения для Timber. Я хочу иметь функцию отправки журнала на мой сервер.

Проблема для меня - Кинжал. У меня есть экземпляр класса RestService в кинжале, и я использую его во всем приложении. Но чтобы его использовать, мне нужно где-то залить этот RestService. Я не могу сделать это в конструкторе, потому что у меня его нет.

Я хочу иметь что-то вроде этого:

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

Возможно ли это вообще? Для меня будет удобно использовать мой механизм, например, простой Timber.d(). Или я могу позвонить

restService.log(log)

в каждом месте. Но я должен иметь этот экземпляр везде.

Теги:
kotlin
kotlin-extension
dagger-2

1 ответ

0
Лучший ответ

В файле, где вы определяете функцию расширения, а также определить "одиночки" object для хранения ваших restService экземпляра, создать сеттер для него, и сослаться на него из функции регистратора.

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 DebugTree.

Примечание. Если вы хотите регистрироваться на сервере каждый раз, когда вы входите в систему (или каждый раз, когда вы регистрируете событие определенного уровня), вам лучше создать собственный Timber.Tree.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню