mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-25 11:04:01 +03:00
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
|
"""Container traversal example."""
|
||
|
|
||
|
from dependency_injector import containers, providers
|
||
|
|
||
|
|
||
|
def init_database():
|
||
|
return ...
|
||
|
|
||
|
|
||
|
def init_cache():
|
||
|
return ...
|
||
|
|
||
|
|
||
|
class Service:
|
||
|
def __init__(self, database, cache):
|
||
|
self.database = database
|
||
|
self.cache = cache
|
||
|
|
||
|
|
||
|
class Container(containers.DeclarativeContainer):
|
||
|
|
||
|
config = providers.Configuration()
|
||
|
|
||
|
service = providers.Factory(
|
||
|
Service,
|
||
|
database=providers.Resource(
|
||
|
init_database,
|
||
|
url=config.database_url,
|
||
|
),
|
||
|
cache=providers.Resource(
|
||
|
init_cache,
|
||
|
hosts=config.cache_hosts,
|
||
|
),
|
||
|
)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
container = Container()
|
||
|
|
||
|
for provider in container.traverse():
|
||
|
print(provider)
|
||
|
|
||
|
# <dependency_injector.providers.Configuration('config') at 0x10d37d200>
|
||
|
# <dependency_injector.providers.Factory(<class '__main__.Service'>) at 0x10d3a2820>
|
||
|
# <dependency_injector.providers.Resource(<function init_database at 0x10bd2cb80>) at 0x10d346b40>
|
||
|
# <dependency_injector.providers.ConfigurationOption('config.cache_hosts') at 0x10d37d350>
|
||
|
# <dependency_injector.providers.Resource(<function init_cache at 0x10be373a0>) at 0x10d346bc0>
|
||
|
# <dependency_injector.providers.ConfigurationOption('config.database_url') at 0x10d37d2e0>
|