gpt4 book ai didi

scala - 如何避免Scala中的依赖注入(inject)?

转载 作者:行者123 更新时间:2023-12-04 22:22:43 35 4
gpt4 key购买 nike

我读了Dependency Injection Without the Gymnastics PDF这表明不需要任何花哨的 DI 框架,但这超出了我的掌握(至少没有具体的例子)。我试试看Dependency Injection Without the GymnasticsDead Simple Dependency Injection当我有机会时。

在 Java 中使用 Guice,如果 A 依赖于 B 和 C,而 B 和 C 都依赖于 D,则会有如下内容:

public class A {
@Inject
public A(B b, C c) {
this.b = b;
this.c = c;
}
}

public class B {
@Inject
public B(D d) {
this.d = d;
}
}

public class C {
@Inject
public C(D d) {
this.d = d;
}
}

public class D { /* ... */ }

和一个说明要使用哪个 D 实现的模块,那么只需从注入(inject)器中请求 A 的一个实例:
A a = injector.createInstance(A.class);

鉴于上述 URL 中提供的内容,上述代码的 Scala 等效项看起来如何?

FWIW,我也在调查 https://github.com/dickwall/subcut/blob/master/GettingStarted.md我只是想了解反DI解决方案。

最佳答案

对于您描述的用例,隐式参数完全足够了。

case class A(implicit b: B, c: C)
case class B(implicit d: D)
case class C(implicit d: D)
class D { /* ... */ }

implicit val theD = new D
implicit val theB = B()
implicit val theC = C()

现在您可以要求 A只需:
val a = A()

关于scala - 如何避免Scala中的依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12341867/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com