背景
我试图在进入Laravel / Symfony之前,从头开始为我自己的教育设计一个相当有用的MVC框架。
我正在尝试实现依赖注入,因为计划在未来扩展此框架,并且我希望保持模块化和可维护性。
这是MVC存储库:https://github.com/JethroHazelhurst/psr-4-mvc
(注意:为简单起见,控制器/路由系统是硬编码的!)
这是我的流程图,显示MVC框架如何构建没有依赖注入。
据我了解,主要的依赖是......
问题
所以我对如何在这里使用依赖注入感到有点困惑......例如:如何使用parent :: __构造函数实现依赖注入(如果有的话)?
此外,依赖于parent :: __这样的构造使框架过于紧密耦合?
非常感谢您的回复。
答案 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应该扩展核心控制器。它们实际上并不总是具有相同的依赖关系,如果您将它们全部从基类继承,则会更难管理。