【发布时间】:2015-02-18 19:12:46
【问题描述】:
如何在一些对象方法而不是构造函数中注入依赖关系?
以下示例适用于 __constructor 注入
如何在 indexAction 中注入 DateTime 对象?
app.php
$app['index.controller'] = $app->share(function() use ($app) {
return new Controllers\IndexController(new \DateTime());
});
IndexController.php
namespace Moo\Controllers;
class IndexController
{
private $date;
public function __construct(\DateTime $date)
{
$this->date = $date;
}
public function indexAction()
{
return $this->date->format('y-m-d');
}
}
【问题讨论】:
-
在构造函数中注入它有什么问题?
-
如果我有 5 个方法,并且每个方法都需要不同的对象来处理怎么办。只在依赖于构造函数的方法中注入不是不合理吗?
-
那么将所有对象放在一个数组中怎么样?或者您可以为特定对象调用的服务?那么php的类对象被设计成有一个构造函数来在运行“actions”和“dependencyInjection”之前设置属性,因为你所有的actions都是这个类的一部分,你也可以考虑为不同的对象设置不同的控制器,我猜一个带有“通用对象获取器”的服务是最好的解决方案
-
您正在寻找方法注入。它位于 Laravel 5 mattstauffer.co/blog/laravel-5.0-method-injection。在那里你可以找到灵感,因为它是基于 Symfony 组件构建的。
标签: php symfony dependency-injection silex