使用父类实现依赖注入?

时间:2016-07-06 12:44:37

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

背景

我试图在进入Laravel / Symfony之前,从头开始为我自己的教育设计一个相当有用的MVC框架。

我正在尝试实现依赖注入,因为计划在未来扩展此框架,并且我希望保持模块化和可维护性。

这是MVC存储库:https://github.com/JethroHazelhurst/psr-4-mvc

(注意:为简单起见,控制器/路由系统是硬编码的!)

这是我的流程图,显示MVC框架如何构建没有依赖注入

enter image description here 据我了解,主要的依赖是......

  1. Core \ Router依赖于Foo \ Controller
  2. FooController依赖于Core \ Controller(通过父:: __构造方法)
  3. Core \ Controller取决于Core \ View
  4. Foo_Model依赖于Core \ model,它取决于Core \ Database
  5. 问题

    所以我对如何在这里使用依赖注入感到有点困惑......例如:如何使用parent :: __构造函数实现依赖注入(如果有的话)?

    此外,依赖于parent :: __这样的构造使框架过于紧密耦合?

    非常感谢您的回复。

2 个答案:

答案 0 :(得分:2)

我认为你混淆了依赖注入和扩展类。

依赖注入处理类的外部依赖项。这意味着如果你在另一个类中使用一个类(在类B中使用类A,而不是扩展类A),那么它就是一个依赖项。依赖容器将自动创建实例并将它们交给需要它们的类。

进一步阅读here

答案 1 :(得分:2)

您实际上需要实现依赖注入。目前没有;没有对象传递其依赖项。在构造函数中,您应该接收正确执行所需的对象。它是dependency injection的基础。

依赖注入将在应用程序的bootstrap phase发生。我认为bootstrap是准备环境以实际处理它所要执行的任何操作的操作,在我们处理http请求的情况下。

通常是index.php only calls a bootstrap.php file。该引导文件将请求路由到特定控制器,并在此过程中创建依赖关系。

使用parent::__construct()完全没问题,这就是你实际传递对象依赖关系的方法。但是,您可以质疑为什么需要它。我不明白为什么你的Controller应该扩展核心控制器。它们实际上并不总是具有相同的依赖关系,如果您将它们全部从基类继承,则会更难管理。

相关问题