标记依赖容器注入的类

时间:2012-01-04 07:54:47

标签: php dependency-injection

我正在使用yadif的修改副本作为我的依赖注入框架。

目前,我创建了一个名为AContainerAware的抽象类,它类似于symfony2的ContainerAware

abstract class AContainerAware{
    protected $_container;

    public function setContainer(Container $container){
       $this->_container = $container;
    }

    protected function get($component){
       //return a component from $this->_container;
    }
}

这在大多数情况下效果很好。我只是需要容器扩展AContainerAware的类,并且在使用setContainer()创建对象期间,DI框架会自动注入容器。然后,我可以轻松地从容器中获取组件。

问题在于使用第三方供应商软件包时。在这些情况下,例如,为twig编写扩展名需要我扩展Twig_Extension类,这意味着我无法扩展AContainerAware来访问容器。

我正在考虑是否将AContainerAware转换为界面IContainerAware。由于类可以实现多个接口,因此在大多数情况下应该可以实现IContainerAware。这种方法的唯一问题是无法在接口中为setContainer()get()编写任何代码,因此必须在每个需要容器的类中实现这些函数的确切代码是重复的。如果setContainer()get()将来发生变化,也会造成维护问题。

有没有更好的方法来标记容器注入的类?

1 个答案:

答案 0 :(得分:-1)

您可以使用PHP 5.4中引入的PHP traits

Traits支持代码的水平重用,而继承是垂直重用。类可以使用多个特征,而您只能继承一个父类。