kotlin - 如何将依赖项注入 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 {}
这很棒。现在我可以调用created_ts
任何实例MyThingie
并获取它创建的时间戳。然而,这现在很难测试。
我真的不想尝试模拟System
,我理解正确的模式是将某种 Clock 实例注入任何需要知道当前时间的东西。这样,我可以在代码中提供一个 RealClock,在测试中我可以提供一个 FakeClock(我可以控制输出)。
目前尚不清楚我如何在这种模式下做到这一点。如何将实现实例传递给委托?
解决方案
为什么不直接使用构造函数依赖注入?
class MyThingie(
dep: ThingieWithCreatedTS = ThingieCreatedAtNow
) : ThingieWithCreatedTS by dep {}
现在您可以在测试中提供假ThingieWithCreatedTS
依赖
推荐阅读
- python - Radix Sort for Strings in Python
- asp.net - 如何在控制器中为 POST 方法使用“Azure 存储 Blob”
- nginx - WSO2 API Manager 3.1.0 Analytics 卡在仪表板小部件 API 加载上
- spring-boot - JPMS/Jigsaw keycloak-spring-boot-starter(无效的模块名称和ResolutionException)
- python - Python,Django rest框架,创建一个包含选项或自由文本的字段
- laravel-5 - 如何使用 Eloquent 范围获取最后一条记录?
- javascript - 一种遍历集合的跨浏览器方式。JS
- reactjs - 使用 React js 在 bootstrap 4 中获取导航栏的状态
- r - 我如何创建一个函数 gentimes() 来创建一个点的 nreps(w1,w2)
- html - 如何设置 Materialize 选择元素的大小?