You can print the
plan to get detailed info on what will happen during instantiation. The printout includes file:line info so your IDE can show you where the binding was defined!
val plan = Injector().plan(module) System.err.println(plan)
You can also query a plan to see the dependencies and reverse dependencies of a specific class and their order of instantiation:
// Print dependencies System.err.println(plan.topology.dependencies.tree(DIKey.get[Circular1])) // Print reverse dependencies System.err.println(plan.topology.dependees.tree(DIKey.get[Circular1]))
The printer highlights circular dependencies.
distage also uses some macros to create
TagKs and function bindings, you can turn on macro debug output during compilation by setting
-Dizumi.distage.debug.macro=true java property:
sbt -Dizumi.distage.debug.macro=true compile
distage-static module, an alternative backend that does not use JVM runtime reflection to instantiate classes and auto-traits.
GraphDumpBootstrapModule to your
Injector’s configuration to enable dumping of graphviz files with a graphical representation of the
val injector = Injector(new GraphDumpBootstrapModule())
Data will be saved dumped to
./target/plan-last-nogc.gv in current working directory.
You’ll need a
GraphViz installation to render these files into a viewable PNG images:
dot -Tpng target/plan-last-nogc.gv -o out.png