以下代码在编译时失败:
object Foo {
case class A()
case class B(a: A)
case class C(b: B)
lazy val a = wire[A]
// Error:(14, 22) Cannot find a value of type: [QuickMain.B]
lazy val c = wire[C]
}
是否有可能让 macwire 自动推断它可以通过创建一个B
来创建一个A
(老实说,lazy val a = wire[A]
甚至不需要)?如果macwire做不到,是否有另一个 Scala 框架可以以类型安全的方式做到这一点(我知道 Dagger,但我正在寻找基于 scala 的解决方案)。
为了说明,在 Guice 中,我可以执行以下操作:
public class JavaExample {
public static class A {}
public static class B {
@Inject
public B(A a) {}
}
public static class C {
@Inject
public C(B b) {}
}
public static void main(String[] args) {
// No bindings necessary!
var injector = Guice.createInjector();
System.out.println(injector.getInstance(C.class));
}
}