可选用户组件的依赖注入

时间:2011-11-23 22:31:39

标签: php model-view-controller dependency-injection

我一直在尝试构建自己的PHP MVC框架纯粹作为一种教育练习,我想要了解如何最好地处理/设计框架以支持可选用户组件的依赖注入。

例如,有一个'核心'框架配置对象,然后,在应用程序文件夹下,用户可以在需要时指定自己的应用程序配置文件/对象。

不是在特定控制器中创建核心配置对象,而是将核心配置对象注入控制器,因为这将使测试更容易(并遵循依赖注入的原则)。

这一切都很好,很有意义,但应用程序配置对象会发生什么?用户可以使用该框架,并且永远不需要特定于应用程序的配置obejct /文件,因此为每个控制器注入特定于应用程序的配置对象似乎效率低下并浪费(在资源上)。

所以基本上我要问的是如何支持用户可能需要或不需要的组件依赖注入?

请记住,我对依赖注入和TDD的想法非常新,所以我猜测上面的问题有一个非常简单的解决方案,但我还没有偶然发现它的所有文章我读了。

我以为我在这篇http://misko.hevery.com/2008/08/21/where-have-all-the-singletons-gone/ Misko Hevery文章中找到了答案,但我认为工厂无法解决可选用户组件的问题。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么困扰你的是注入可能最终未被使用的对象。

这可以通过使用 lazy-injection 来解决,这是注入一个空的代理对象,只有在使用它时才会加载“真实”对象。

PHP-DI支持它,例如:

class Class1 {
    /**
     * @Inject(lazy=true)
     * @var Class2
     */
     private $class2;