2

以下代码在编译时失败:

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));
  }
}
4

0 回答 0