PHP:DI容器

时间:2012-06-29 21:29:03

标签: php dependency-injection

我一直在阅读依赖注入和DI容器。但是我无法理解这个概念。

DI容器如何知道'controller'依赖于'loader'并在'controller'之前加载'loader'?

我看到它的方式是它需要某种配置文件来跟踪依赖关系,如果是这样,它就更容易编写:

// Controller
function __construct() {
    $this->load = new \Framework\Core\Loader;
}

2 个答案:

答案 0 :(得分:2)

是的,DIC需要预先配置,可以在某个配置文件中,也可以通过堆叠工厂关闭或通过注释源代码来实现。

是的,在ctor中创建实例更容易,但这将消除DI的所有好处,因为您不再注入依赖项了。

另请注意,您不需要DIC才能进行DI。 DI只是通过构造函数,设置器或使用方法在代码中注入依赖项的行为。

答案 1 :(得分:0)

完成戈登所说的话:

  

是的,DIC需要在某些配置文件中预先配置   通过堆叠工厂关闭或通过注释你的   源代码。

这里最简单/最快捷的方式是注释,请查看此示例:

class Loader {
    //...
}

class MyController {
    /**
     * @Inject
     * @var Loader
     */
    private $loader;

    public indexAction() {
        // You can use $this->loader
    }

}

在此示例中,依赖项(加载程序)已通过注释注入:代码清晰,可读,并且您不需要编写任何配置文件。这是IMO最简单的解决方案。

如果您对这种方法感兴趣,我从PHP-DI获取了一个示例,这是一个使用注释的依赖注入框架(我在其上工作)。