我有一个服务,在services.yaml中定义了不同的参数。
user_uploader:
class: App\Services\UploaderPath
arguments:
$basePath: "%users_directory%"
worker_uploader:
class: App\Services\UploaderPath
arguments:
$basePath: "%workers_directory%"
当我把这个服务注入到另一个服务中时,一切都很正常,因为我可以通过名称注入它。当我想使用DI和使用例如 worker_uploader
public function foo(UploaderPath $workerUploader) {
}
如何在这种情况下注入适当的服务?
如果你使用的是Symfony 3.4或更高版本,你可以利用bind来实现。
在服务yaml中
services:
_defaults:
bind:
$userUploader: '@user_uploader'
$workerUploader: '@worker_uploader'
user_uploader:
class: App\Services\UploaderPath
arguments:
$basePath: "%users_directory%"
worker_uploader:
class: App\Services\UploaderPath
arguments:
$basePath: "%workers_directory%"
那么比如说在SomeController中,你可以这样使用它。
class SomeController extends AbstractController
{
private $userUploader;
private $workerUploader;
public function __construct($userUploader, $workerUploader)
{
$this->userUploader = $userUploader;
$this->workerUploader = $workerUploader;
}
}
这里有更多细节 https:/symfony.comdoc4.4service_container.html#binding-arguments by name-or-type。