如何在 Laravel 中传递自定义参数的同时在工厂方法中注入服务依赖项?

问题描述 投票:0回答:1

我想使用工厂方法设计模式创建一个服务。所以我创建了以下产品:

class ActivityReport
{
    private $activityService;

    public function __construct(Customer $customer, ActivityService $activityService)
    {
        $this->activityService = $activityService;
    }

    public function getData()
    {
        // It will be more code
        return $this->activityService->getAll($this->customer->id);
    }
}

我这样称呼它:

class ActivityReportCreator extends ReportCreator
{
    private $customer;

    function __construct(Customer $customer)
    {
        $this->customer = $customer;
    }

    public function generate() {
        $activity = new ActivityReport($customer->id);
        return $activity->getData();
    }
}

这里的问题在于产品中的构造函数,它通过 DI(依赖注入)接受应该自动加载的服务,就像服务或控制器通常发生的情况一样。

activityService
已注册并可在例如控制器中运行。我可以使用
app(ActivityReport::class)
运行它,但首先,我仍然需要将
$customer
对象传递给方法,而不是传递给构造函数。其次,我想在任何地方一致地引用该服务,就像在控制器中所做的那样。

我怎样才能实现这个目标?

php laravel dependency-injection
1个回答
0
投票

如果你想持久化服务,我认为你的函数不应该绑定到特定的服务实例。由于函数

getData()
需要根据
$customer->id
确定其行为,因此您需要传递特定的服务实例而不是抽象对象。综上所述,如果你想持久地引用服务,你的服务应该是一个抽象对象,而不是一个实例。

也许你可以尝试

getData($customerId)

© www.soinside.com 2019 - 2024. All rights reserved.