首页 文章

标记依赖容器注入的类

提问于
浏览
0

我正在使用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 回答

  • -1

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

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

相关问题