请注意,在提出这个问题之前,我已经调查过:
和
Laravel 4:对如何使用 App::make() 感到困惑
但我看不到他们回答了我的问题!
域模型:一个站点必须有一个所有者,目前这个所有者是客户类型,但将来可以更改为经销商或员工等。所以我使用多态性如下:
类站点有一个所有者属性。Owner 是一个接口,Customer 是一个实现 Owner 的类,Customer 有一个 Name 和一个 Uid,因此这些在 Customer 的构造函数中是必需的。
现在我想将 Customer 实现绑定到 Owner 接口,这样每当我调用 Owner 时,我都会得到一个客户。
我们通常会这样做:
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);
}
这将从聚合根(站点)初始化。正确的类型将传递给它。