Php Laravel绑定对象接口,其实现中包含变量参数';s构造函数

Php Laravel绑定对象接口,其实现中包含变量参数';s构造函数,php,laravel,domain-driven-design,laravel-5,service-provider,Php,Laravel,Domain Driven Design,Laravel 5,Service Provider,请注意,在回答这些问题之前,我已经研究过: 及 但我看不出他们回答了我的问题 域模型: 一个站点必须有一个所有者,并且当前该所有者是Customer类型,但将来可以更改为经销商或员工等。。所以我使用多态性如下: /** * Initialise a new Customer * * @param Identifier $id * @param CustomerName $name */ public function __c

请注意,在回答这些问题之前,我已经研究过:

但我看不出他们回答了我的问题

域模型: 一个站点必须有一个所有者,并且当前该所有者是Customer类型,但将来可以更改为经销商或员工等。。所以我使用多态性如下:

    /**
     * Initialise a new Customer
     *
     * @param Identifier $id
     * @param CustomerName $name
     */
    public function __construct(Identifier $id, $name)
    {
        $this->id       =       $this->setId($id);
        $this->name     =       $this->setName($name);
    }
类站点具有所有者属性。 所有者是一个接口, Customer是一个实现Owner的类, Customer具有名称和Uid,因此在Customer的构造函数中需要这些名称和Uid

现在,我想将客户实现绑定到所有者接口,以便无论何时调用所有者,都能得到一个客户

我们通常会这样做:

class UseCustomerAsSiteOwnerServiceProvider extends ServiceProvider{

    public function register()
    {
        $this->app->bind('hidden\Domain\Model\Site\Owner', function ($app)
        {
            return $this->app->make(new Customer());
        });


    }

}
但是Customer()需要初始化$id和$name,它们是变量对象,不是静态的,所以我不知道如何传递它们

我试过这个:

public function register()
    {
        $this->app->bind('hidden\Domain\Model\Site\Owner', function ($app) use ($id, $name)
        {
            return $this->app->make(new Customer($id, $name));
        });


    }
但是在这种情况下,USE语句中的$name和$id没有定义。有人有想法吗

更新: 客户构造函数如下所示:

    /**
     * Initialise a new Customer
     *
     * @param Identifier $id
     * @param CustomerName $name
     */
    public function __construct(Identifier $id, $name)
    {
        $this->id       =       $this->setId($id);
        $this->name     =       $this->setName($name);
    }

这将从聚合根(站点)初始化。正确的类型将被传递给它。

因为我认为不可能传递变量,所以我决定从客户中删除构造函数,并使用自定义方法设置其属性,这样现在我可以说:


$this->owner->setId(标识符Id)。服务提供商将把所有者解析为其客户实现。

如果您将它们正确地传递到闭包中,则它们没有定义,因为您在闭包之前从未定义过它们。
$id
$name
的确切来源以及
变量对象的含义是什么?@user3158900我用更多信息更新了问题。我的意思是,Id和名称的值都会因我们要初始化的客户而异。我发现的示例问题都使用静态值作为参数,所以很容易在服务提供商中使用它们。