python-dependency-injector icon indicating copy to clipboard operation
python-dependency-injector copied to clipboard

Override a dependency in a container subclass

Open warvariuc opened this issue 2 years ago • 0 comments

import dependency_injector.containers as dic
import dependency_injector.providers as dip


class UnitOfWork:
    ...


class TestUnitOfWork(UnitOfWork):
    ...


class ApplicationContainer(dic.DeclarativeContainer):
    unit_of_work_class = dip.Callable(UnitOfWork)
    uow = dip.Factory(unit_of_work_class)


class TestApplicationContainer(ApplicationContainer):
    unit_of_work_class = dip.Callable(TestUnitOfWork)


container = TestApplicationContainer()
print(container.uow())
with container.unit_of_work_class.override(TestUnitOfWork):
    print(container.uow())

The output:

<__main__.UnitOfWork object at 0x110ae9ed0>
<__main__.UnitOfWork object at 0x110ae9ed0>

I would expect that container.uow() to return an instance of TestUnitOfWork, since container is an instance of TestApplicationContainer which has unit_of_work_class = dip.Callable(TestUnitOfWork).

container.unit_of_work_class.override(TestUnitOfWork) also doesn't work, as you can see...

warvariuc avatar Jan 19 '24 14:01 warvariuc