我有两个实现相同接口的存储库。
我还添加了 USE_LEGACY 环境变量(也作为 services.yaml 中的参数):
parameters:
use_legacy: '%env(bool:USE_LEGACY)%'
我想要实现的是,如果 USE_LEGACY 设置为 true,则调用时的接口将调用旧版存储库,如果不是,它将调用其他(非旧版)存储库。
到目前为止我尝试过:
services:
App\Repository\Interface\RepoAInterface:
alias: '@=service("App\Repository" ~ (parameter("use_legacy:") == false ? "\\RepoA" : "\Legacy\\RepoA"))'
但这不起作用,
有什么解决办法吗?
仅供参考,我正在使用 Symfony 6.4 和 PHP 8.3
感谢您的建议!
services:
App\Repository\Interface\RepoAInterface:
factory: '@App\Factory\RepoAFactory'
arguments:
- '%use_legacy%'
use App\Repository\RepoA;
use App\Repository\Legacy\RepoA as LegacyRepoA;
use App\Repository\Interface\RepoAInterface;
use Psr\Container\ContainerInterface;
class RepoAFactory
{
public function __construct(
#[AutowireLocator([
RepoA::class,
LegacyRepoA::class,
])]
private ContainerInterface $locator,
) {
}
public function __invoke(bool $useLegacy): RepoAInterface {
return $useLegacy === true
? $this->locator->get(LegacyRepoA::class)
: $this->locator->get(RepoA::class);
}
}