如何在Kotlin中将依赖项注入接口委托?

3
我将翻译以下内容:

我正在尝试弄清楚如何在Kotlin中将依赖项注入接口委托。 我有一个类:

我正在尝试解决如何在 Kotlin 中将依赖项注入到接口委托中的问题。下面是我的一个类:
class MyThingie {}

我希望在这个类中添加一个字段created_time,这个字段也可能会被添加到其他类中。因此,我可以创建一个接口和其实现的实例,然后将该委托添加到类定义中:

interface ThingieWithCreatedTS {
    val created_ts: Long
}

object ThingieCreatedAtNow : ThingieWithCreatedTS {
    override val created_ts: Long = System.currentTimeMillis()
}

class MyThingie : ThingieWithCreatedTS by ThingieCreatedAtNow {}

这很好。现在我可以在任何MyThingie实例上调用created_ts并获取其创建时间戳。但是,这现在很难测试。
我不想试图模拟System,我理解正确的模式是将某种时钟实例注入到需要知道当前时间的任何内容中。这样,我可以在代码中提供RealClock,在测试中我可以提供FakeClock(我可以控制输出)。
在此模式下,我无法确定如何将实现实例传递给委托。
1个回答

8

为什么不直接使用构造函数依赖注入?

class MyThingie(
    dep: ThingieWithCreatedTS = ThingieCreatedAtNow
) : ThingieWithCreatedTS by dep {}

现在你可以在测试中提供假的ThingieWithCreatedTS依赖。

太棒了!我完全不知道你可以从构造函数字段中获取委托实现。谢谢! - undefined
2
如何在处理活动时实现相同效果?我们不能通过构造函数注入活动。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接