提问人:Jamison Bryant 提问时间:11/10/2023 更新时间:11/10/2023 访问量:17
无法将 Interface 与 CakePHP 依赖注入一起使用 - “参数必须是 AuthorizationServiceInterface 类型,给定字符串”
Unable to use Interface with CakePHP Dependency Injection - "Argument must be of type AuthorizationServiceInterface, string given"
问:
我想在我的应用程序中创建一个具有依赖项的服务类,以便它可以访问用户的标识。我有这个构造函数:AuthorizationService
public function __construct(
private readonly AuthorizationServiceInterface $authorization,
private readonly OrganizationsTable $organizationsTable,
private readonly array $config = []
) { ... }
我有一个我已经注册的,但它实际上做了两个工作:AuthorizationServiceProvider
Application::services()
- 扩展和实现
ServiceProvider
services()
- 实施和实施
AuthorizationServiceProviderInterface
getAuthorizationService()
(从技术上讲,本书说要将后一个接口附加到您的 Application 类,但我将其分解为一个单独的类,然后实例化该类并将其传递给 .这部分工作正常。AuthorizationMiddleware
对于我在这类中的服务方法,我有:
public function services(ContainerInterface $container): void
{
$container->add(AuthorizationServiceInterface::class, function () use ($container) {
$request = $container->get(ServerRequestInterface::class);
return $this->getAuthorizationService($request);
});
}
所以基本上我尝试在容器中注册,然后通过在同一类中调用我的方法来提供具体的实现。AuthorizationServiceInterface
getAuthorizationService()
至关重要的是,在这门课上,我还有:
protected $provides = [
AuthorizationServiceInterface::class,
];
但是,我收到此错误:
“App\\Service\\Crud\\Organization\\OrganizationSearcher::__construct(): Argument #1 ($authorization) must be of type Authorization\\AuthorizationServiceInterface, string given”
过去,这总是表明(对我来说)我在类属性中缺少该类 FQCN。但正如你所看到的,它就在那里。$provides
我做错了什么?
- 尝试确保类属性中存在
AuthorizationServiceInterface
$provides
- 尝试用清除缓存
bin/cake cache clear_all
- 尝试对服务提供商进行重新排序,看看是否有任何影响
Application::services()
最终,我希望服务容器能够使用我的方法解析,并将其传递给需要它的服务类。AuthorizationServiceInterface
getAuthorizationService()
答: 暂无答案
评论