python-dependency-injector/examples/containers/dynamic_runtime_creation.py
2020-08-15 22:09:41 -04:00

41 lines
1.0 KiB
Python

"""Creation of dynamic container based on the configuration example."""
from dependency_injector import containers, providers
class UserService:
...
class AuthService:
...
def populate_container(container, providers_config):
for provider_name, provider_info in providers_config.items():
provided_cls = globals().get(provider_info['class'])
provider_cls = getattr(providers, provider_info['provider_class'])
setattr(container, provider_name, provider_cls(provided_cls))
if __name__ == '__main__':
services_config = {
'user': {
'class': 'UserService',
'provider_class': 'Factory',
},
'auth': {
'class': 'AuthService',
'provider_class': 'Factory',
},
}
services = containers.DynamicContainer()
populate_container(services, services_config)
user_service = services.user()
auth_service = services.auth()
assert isinstance(user_service, UserService)
assert isinstance(auth_service, AuthService)