我希望能够通过容器解析具有构造函数依赖的字符串类实例。当我解析类时,我想传递构造函数依赖项。
一个我测试过的简单示例:Foo是我要解析的类,$id是构造函数参数。
这表明公共属性
然而,如果我不想把
那么我需要按照以下方式进行绑定:
这感觉非常不专业。这是否滥用了服务容器?
有人可能会认为,解析服务容器时传递构造函数参数并不是一个好主意,而是应该使其无状态或使用 setter。但如果在
一个我测试过的简单示例:Foo是我要解析的类,$id是构造函数参数。
class Foo
{
public function __construct(public $id)
{}
}
在服务容器中绑定:
$this->app->bind('foo', function($app, $id) {
return new Foo($id);
});
并从容器中解决它:
$foo = App::makeWith('foo', ['id' => 1]);
$foo
is then resolved as
Foo
{
+id: ["id" => 1],
}
这表明公共属性
$id
被设置为一个数组。然而,如果我不想把
$id
设置为数组,而是整数呢?那么我需要按照以下方式进行绑定:
App::bind('foo', function($app, $arg) {
return new Foo($arg['id']);
});
这感觉非常不专业。这是否滥用了服务容器?
有人可能会认为,解析服务容器时传递构造函数参数并不是一个好主意,而是应该使其无状态或使用 setter。但如果在
Foo
中的许多方法将使用,比如说 $id
,那么将 $id
作为构造函数传递是最方便和最佳实践的,对吧?
$id=1
的位置,你可以使用上下文绑定和when()->needs()->give()
来实现。 - Mohsen Nazari