我正在使用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()
将来发生变化,也会造成维护问题。
有没有更好的方法来标记容器注入的类?