这个问题不是很清楚,但我会尝试回答。
对于应用程序特定的事物(如模型、控制器等),我应该如何管理依赖项的自动注入?
您使用 DIC 吗?您是编写了一个还是使用了一个库?
也许一个库可以帮助,我是 PHP-DI 的作者,所以我有偏见,但是这个库可以帮助我自动注入依赖项。
例如,我可以编写:
class UserController
{
private $formFactory;
public function __construct(FormFactory $formFactory) {
$this->formFactory = $formFactory;
}
public function createForm($type, $data, $options) {
// $this->formFactory->...
}
}
在这种情况下,DIC可以检测到你的控制器需要什么依赖项,并自动注入它们。这使得生活更加容易。
“我恰好有一个大型网站,可能有30-40种不同类型的模型...我真的需要创建一个单一的应用程序依赖管理器来处理这些不同类型吗?”
为什么你需要那个?我不明白需要什么,也许你需要解释一下问题是什么。
“有人告诉我DIC不适用于领域相关的东西,而更适用于框架相关的东西,我也听到了相反的说法。”
哪一个是“正确”的?
在我看来,“领域相关的东西”和“框架相关的东西”之间没有区别。唯一困难的是,DIC注入实体时,因为这不是一个“单例”(不是Singleton Pattern的方式):这些对象不受DIC“管理”,你可以在代码中的任何地方手动创建实例。例如:
$user = new User();
如果User类需要一个服务,在你的代码中每个地方都需要这样做:
$user = new User($service);
相反,您永远不需要手动创建服务(永远不需要调用“new”),因此您可以让容器创建实例并注入所有内容。
我对我的答案并不太满意,因为它有点含糊不清,但是我很难确定你的问题是什么。也许你应该给出代码示例,或者至少解释得更详细一些。
PS:我也曾经努力理解DI和DIC是什么,不要满足于“我想我现在有点明白了,虽然还不完全”,我也是这样做的,花了几个月的时间才最终理解。
如果有帮助的话,请阅读
http://mnapoli.github.io/PHP-DI/的介绍文本,也许还可以阅读
http://mnapoli.fr/controllers-as-services/(虽然不直接相关,但可能有所帮助)。