【问题标题】:How to create a different object that can be referenced globally in Kotlin如何创建可以在 Kotlin 中全局引用的不同对象
【发布时间】:2019-07-23 05:55:37
【问题描述】:

我正在创建一个 API,并且我想要一个用于日志的全局对象。这个想法是记录对 API 的每个请求的成功或失败,但避免传递记录器对象,并且在此过程中每个类都没有一个记录器,因为您无法跟踪哪个日志发送到哪个请求。

我最初创建了一个对象

object Logger {
    private var instance: LogEntry? = null
}

我还向所述对象添加了函数,所以我可以从任何地方调用它们。但是,如果我这样做,日志的实例可能会被多个请求更改。如何确保每个请求都有自己的日志对象,在每次调用后都会被销毁?

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    并不是真正特定于 Kotlin(而且我真的比 Kotlin 更喜欢 Java),但这对于 dependency injection 来说是一个很好的案例。每个请求的构造函数(或初始化)都应允许将logger 对象作为参数传入。

    这允许框架决定传入哪种记录器,并管理记录器的生命周期。

    记录器接口本身可能是不可变的,因此一旦框架初始化,客户端就无法更改它。

    【讨论】:

    • 听起来是一个有趣的想法,但是我必须将该记录器对象传递给所有使用该服务的底层调用,从而污染具有相同对象的所有调用。我正在努力避免这种情况
    • 并非如此——如果您使用 DI 将那些其他对象依赖项注入到您的目标中,它们将成为同一上下文的一部分,并且它还外部化了清理您的业务逻辑的依赖对象的初始化在此过程中编写代码。
    • 我看到这和 Spring 一样工作,但我的主要问题是我有一个看起来像 Controller -> Service -> Provider -> Presenter 的结构,所以如果我在 Controller 上注入一个记录器,我该如何避免将相同的记录器对象传递给ServiceProviderPresenter,但仍然能够记录每个请求而不是每个类的错误?
    • 我使用 Spring 的依赖注入添加了对象,最终将记录器对象作为调用上下文的一部分传递。别无选择
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多