Specialization of the container provider type — Dependency Injector 4.47.0 documentation (original) (raw)
You can make a restriction of the DeclarativeContainer
provider type:
import abc
from dependency_injector import containers, providers
class Service(metaclass=abc.ABCMeta): ...
class UserService(Service): ...
class ServiceProvider(providers.Factory):
provided_type = Service
class ServiceContainer(containers.DeclarativeContainer):
provider_type = ServiceProvider
class MyServices(ServiceContainer):
user_service = ServiceProvider(UserService)
class ImproperServices(ServiceContainer):
other_provider = providers.Factory(object)
The emphasized lines will cause an error because other_provider
is not a subtype of theServiceProvider
. This helps to control the content of the container.
The same works for the DynamicContainer
:
import abc
from dependency_injector import containers, providers
class Service(metaclass=abc.ABCMeta): ...
class UserService(Service): ...
class ServiceProvider(providers.Factory):
provided_type = Service
services = containers.DynamicContainer() services.provider_type = ServiceProvider
services.user_service = ServiceProvider(UserService) services.other_provider = providers.Factory(object)
The emphasized line will also cause an error.