python-dependency-injector循环相关包

4bbkushb  于 11个月前  发布在  Python
关注(0)|答案(1)|浏览(96)

当使用子容器来组织应用程序中的层时,它们之间可能不会存在循环依赖关系。但是,对于域,情况并非如此。

@dataclass
class UserService:
    payments: "PaymentsService"

    def user_action(self):
        print("user action")
        self.payments.payment_action

@dataclass
class PaymentsService:
    users: UserService

    def payment_action(self):
        print("payment action")

class UserContainer(containers.DeclarativeContainer):
    payments = providers.DependenciesContainer()

    service = providers.Factory(UserService, payments=payments.service)

class PaymentContainer(containers.DeclarativeContainer):
    users = providers.DependenciesContainer()

    service = providers.Factory(PaymentsService, users=users.service)


class ApplicationContainer(containers.DeclarativeContainer):
    users = providers.Container(UserContainer, payments=???)
    payments = providers.Container(PaymentContainer, users=users)

字符串
如果我想在最外层的容器中链接具有循环依赖关系的包,该怎么办?

avwztpqn

avwztpqn1#

您可以在ApplicationContainer类中添加此行

class ApplicationContainer(containers.DeclarativeContainer):
    users = providers.Container(UserContainer)
    payments = providers.Container(PaymentContainer)

    users.override_providers({UserContainer.payments: payments.service})
    payments.override_providers({PaymentContainer.users: users.service})

字符串

相关问题