gpt4 book ai didi

symfony - 在 Symfony2 的依赖注入(inject)中避免循环引用?

转载 作者:行者123 更新时间:2023-12-01 02:03:48 28 4
gpt4 key购买 nike

我是依赖注入(inject)的忠实粉丝,但有些事情困扰着我,我想知道是否有人可以给我一个解释:

不可能创建两个相互依赖的服务,因为我们会得到一个“循环引用”异常。我想每个使用 symfony2 的人都遇到过这个错误。

虽然我非常了解这个错误,但有时我会遇到它,因为有很多服务,会带来复杂性......而且,也许还因为设计/调整服务并不容易。

因此,我想知道这个错误的根本原因:

  • 这是为了保护我们免受潜在的严重设计错误?如果是这种情况,您能否举一个例子说明如果两个依赖服务可以“共同生活”会发生什么严重的事情?
  • 是纯技术吗? IE。因为不可能同时调用两个构造函数。如果这是根本原因,为什么不通过强制服务构造函数为空并具有 init 方法来解决它呢?

  • IE。:
    class MyService1{

    private $service2;

    public function __construct(){ //empty constructor
    ...
    }

    protected function init(MyService2 $service2, ...){
    $this->service2 = $service2;
    }

    }

    class MyService2{

    private $service1;

    public function __construct(){ //empty constructor
    ...
    }

    protected function init(MyService1 $service1, ...){
    $this->service1 = $service1;
    }

    }

    然后实例化这两个服务:
    $service1 = new MyService1();
    $service2 = new MyService2();
    $service1->init($service2);
    $service2->init($service1);

    我很确定有些东西我没有深入理解。那么有人可以解释一下为什么我们不能在容器中创建循环引用吗?

    谢谢

    最佳答案

    理想情况下,您的服务将遵守依赖倒置原则。

    也就是说,高级组件将依赖于低级组件,但不是相反 .此外,为了获得更高的内聚力,这种依赖关系将通过抽象或接口(interface)实现。

    this question from the Programmers SE地点。

    enter image description here

    关于symfony - 在 Symfony2 的依赖注入(inject)中避免循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265332/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com