我目前正在服务中使用具有特定ID的实体。为了使用依赖注入来完成这项工作,我正在注入实体存储库和一个特定的ID。例如:
public function __construct($myRepo, $myId) {
$this->myEntity = $myRepo->find($myId);
}
有没有办法在不传入存储库的情况下直接注入此特定实体?例如,理想的方法是:
public function __construct($myEntity) {
$this->myEntity = $myEntity;
}
我无法弄清楚如何定义执行此操作所需的服务。
答案 0 :(得分:4)
服务应该是无国籍的。在服务中保存具有特定ID的用户会使其成为状态。
不是在构造函数中传递实体并将其保存在属性中,而是应将实体传递给调用的方法。例如。而不是传递给构造函数的to
地址的邮件程序,它应该传递给mailer#mail()
方法。
答案 1 :(得分:1)
@Wouter对服务无状态提出了一个很好的观点。但是,您可以使用DI工厂功能来实现目标:
specific_entity:
class: SomeEntity # Not used but you still need something here
factory_service: specific_entity_repository
factory_method: find
arguments:
- 42
这将使用参数42调用存储库中的find方法。然后将注入返回的实体。我假设您已经知道如何将存储库设置为服务。