Skip to content

Commit 63a5dda

Browse files
authored
dynamic container: tests and docs (#42)
1 parent 3889e72 commit 63a5dda

File tree

4 files changed

+72
-25
lines changed

4 files changed

+72
-25
lines changed

docs/index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
introduction/ioc-container
1010
introduction/fastapi
1111
introduction/litestar
12-
introduction/multiple-containers
1312
introduction/inject-factories
13+
introduction/multiple-containers
14+
introduction/dynamic-container
1415
1516
.. toctree::
1617
:maxdepth: 1
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Dynamic container
2+
3+
You can dynamically assign providers to container:
4+
```python
5+
import datetime
6+
7+
from tests import container
8+
from that_depends import BaseContainer, providers
9+
10+
11+
class DIContainer(BaseContainer):
12+
sync_resource: providers.Resource[datetime.datetime]
13+
async_resource: providers.AsyncResource[datetime.datetime]
14+
15+
16+
DIContainer.sync_resource = providers.Resource(container.create_sync_resource)
17+
DIContainer.async_resource = providers.AsyncResource(container.create_async_resource)
18+
```
19+
20+
And than you can use these providers as usual:
21+
22+
```python
23+
sync_resource = await DIContainer.sync_resource()
24+
async_resource = await DIContainer.async_resource()
25+
```

poetry.lock

Lines changed: 24 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/test_dynamic_container.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import datetime
2+
3+
from tests import container
4+
from that_depends import BaseContainer, providers
5+
6+
7+
class DIContainer(BaseContainer):
8+
sync_resource: providers.Resource[datetime.datetime]
9+
async_resource: providers.AsyncResource[datetime.datetime]
10+
11+
12+
DIContainer.sync_resource = providers.Resource(container.create_sync_resource)
13+
DIContainer.async_resource = providers.AsyncResource(container.create_async_resource)
14+
15+
16+
async def test_dynamic_container() -> None:
17+
sync_resource = await DIContainer.sync_resource()
18+
async_resource = await DIContainer.async_resource()
19+
20+
assert isinstance(sync_resource, datetime.datetime)
21+
assert isinstance(async_resource, datetime.datetime)

0 commit comments

Comments
 (0)