MacWire: возможно ли получить автоматическую разводку рекурсивно зависимых классов дел, как в @Inject с Guice?

Следующий код завершается ошибкой во время компиляции:

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

0 ответов

Другие вопросы по тегам