我有两个服务MysqlSearchProvider和ElasticSearchProvider。我想使用一个环境变量来轻松地更改当前用于搜索引擎的服务。
我尝试用service factory实现类似的东西。
parameters:
search_provider: 'mysql'
services:
AppFactorySearchService:
factory: [ 'AppFactorySearchServiceFactory', 'createSearchService' ]
arguments:
- '%search_provider%'
工厂:
class SearchServiceFactory
{
public static function createSearchService($arguments): SearchServiceInterface
{
return new SearchService();
}
}
服务:
class MysqlSearchService implements SearchServiceInterface
{
public function search(): string
{
return 'base search';
}
}
控制器:
class TestController extends AbstractController
{
#[Route('/')]
public function test(SearchServiceInterface $interface /*???*/): Response
{
return new Response();
}
}
但是,我不知道如何,例如,通过注入SearchServiceInterface注入工厂生成的适当服务。
天哪,有时候我不这么想。
services:
AppFactorySearchServiceInterface: '@AppFactorySearchService'