Factory
Factory works exactly same as Transient provider.
Also supports asynchronous dependencies.
Example
import asyncio
from dataclasses import dataclass
from typing import Tuple
from injection import DeclarativeContainer, providers
@dataclass
class SomeClass:
field: Tuple[int, int]
async def coroutine_func(arg1: int, arg2: int) -> Tuple[int, int]:
return arg1, arg2
class DIContainer(DeclarativeContainer):
coroutine = providers.Coroutine(coroutine_func, arg1=1, arg2=2)
sync_factory = providers.Factory(SomeClass, field=(10, 20))
async_factory = providers.Factory(SomeClass, field=coroutine)
async def main() -> None:
instance = await DIContainer.async_factory.async_resolve()
assert instance.field == (1, 2)
instance1 = DIContainer.sync_factory()
instance2 = DIContainer.sync_factory()
assert instance1 is not instance2
asyncio.run(main())