Async¶
diwire supports async providers and async resolution.
Async factories¶
add_factory() accepts async def factories. Resolve them with await container.aresolve(...).
Async cleanup¶
add_generator() supports async generators (async def ...: yield ...). Registrations are validated by default
and must place yield in try/finally. Cleanup in the finally block runs when the owning scope exits. Use
require_generator_finally=False on a specific registration to opt out when intentional.
Runnable example: Async.
Sync vs async resolution¶
If a dependency chain requires an async provider, calling resolve() raises
diwire.exceptions.DIWireAsyncDependencyInSyncContextError. Use aresolve() for that chain.
Concurrency note¶
diwire does not automatically parallelize independent async dependencies. If you want concurrency (for example, multiple
independent I/O calls), use asyncio.gather() in your application logic.