Compilation

compile() builds and caches a root resolver for the current registration graph.

Why compile

  • It removes most reflective work from steady-state resolution.

  • It makes repeated resolve() / enter_scope() calls faster on hot paths.

Caching and invalidation

The compiled resolver is cached on the container.

Any registration mutation (calling add_* or decorate(...)) invalidates the cached resolver. The next call to compile(), resolve(), aresolve(), or enter_scope() recompiles as needed.

Strict mode (opt-in) hot-path rebinding

In strict mode (opt-in via missing_policy=MissingPolicy.ERROR and dependency_registration_policy=DependencyRegistrationPolicy.IGNORE), diwire can bind hot-path container entrypoints directly to the compiled resolver instance. This avoids container-level indirection for:

  • resolve()

  • aresolve()

  • enter_scope()

Runnable example: Compilation.