Проблемы с внедрением реализаций в абстрактные классы с помощью python-inject 5.1.0

Я пытаюсь использовать Python-inject 5.1.0, но не могу внедрить класс, реализованный в абстрактный класс.

      class JobGateway(ABC):
    @abstractmethod
    def get_by_id(self, id: str):
        pass
    
class JobGatewayImpl(JobGateway):
    @inject.autoparams()
    def __init__(self, db: Database):
        self.collection = db["jobs"]

    def get_by_id(self, id: str):
        data = self.collection.find_one({"_id": ObjectId(id)})

        if data is None:
            return None

        return data

class MessageProcessor:
    @inject.autoparams()
    def __init__(
        self,
        job_gateway: JobGateway
    ) -> None:
        self.job_gateway = job_gateway

    def run(self, id):
        job = self.job_gateway.get_by_id(id)    

Моя дополнительная конфигурация:

      binder.bind_to_constructor(JobGateway, lambda: inject.instance(JobGatewayImpl))

Когда я получаю экземпляр MessageProcessor, job_gateway не получает реализацию JobGatewayImpl.


Но когда я пытаюсь получить экземпляр напрямую, JobGatewayImpl получается успешно.

      j2: JobGateway = inject.instance(JobGateway)

Почему реализация JobGatewayImpl не внедряется в процессор?

Мне бы хотелось, чтобы при запуске линии

      processor: MessageProcessor = inject.instance(MessageProcessor)

зависимость JobGateway получает экземпляр JobGatewayImpl

0 ответов

Другие вопросы по тегам