我一直在阅读依赖注入和DI容器。但是我无法理解这个概念。
DI容器如何知道'controller'依赖于'loader'并在'controller'之前加载'loader'?
我看到它的方式是它需要某种配置文件来跟踪依赖关系,如果是这样,它就更容易编写:
// Controller
function __construct() {
$this->load = new \Framework\Core\Loader;
}
答案 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获取了一个示例,这是一个使用注释的依赖注入框架(我在其上工作)。