无法将 Interface 与 CakePHP 依赖注入一起使用 - “参数必须是 AuthorizationServiceInterface 类型,给定字符串”

Unable to use Interface with CakePHP Dependency Injection - "Argument must be of type AuthorizationServiceInterface, string given"

提问人:Jamison Bryant 提问时间:11/10/2023 更新时间:11/10/2023 访问量:17

问:

我想在我的应用程序中创建一个具有依赖项的服务类,以便它可以访问用户的标识。我有这个构造函数:AuthorizationService

public function __construct(
    private readonly AuthorizationServiceInterface $authorization,
    private readonly OrganizationsTable $organizationsTable,
    private readonly array $config = []
) { ... }

我有一个我已经注册的,但它实际上做了两个工作:AuthorizationServiceProviderApplication::services()

  1. 扩展和实现ServiceProviderservices()
  2. 实施和实施AuthorizationServiceProviderInterfacegetAuthorizationService()

(从技术上讲,本书说要将后一个接口附加到您的 Application 类,但我将其分解为一个单独的类,然后实例化该类并将其传递给 .这部分工作正常。AuthorizationMiddleware

对于我在这类中的服务方法,我有:

public function services(ContainerInterface $container): void
{
    $container->add(AuthorizationServiceInterface::class, function () use ($container) {
        $request = $container->get(ServerRequestInterface::class);
        return $this->getAuthorizationService($request);
    });
}

所以基本上我尝试在容器中注册,然后通过在同一类中调用我的方法来提供具体的实现。AuthorizationServiceInterfacegetAuthorizationService()

至关重要的是,在这门课上,我还有:

protected $provides = [
    AuthorizationServiceInterface::class,
];

但是,我收到此错误:

“App\\Service\\Crud\\Organization\\OrganizationSearcher::__construct(): Argument #1 ($authorization) must be of type Authorization\\AuthorizationServiceInterface, string given” 

过去,这总是表明(对我来说)我在类属性中缺少该类 FQCN。但正如你所看到的,它就在那里。$provides

我做错了什么?

  1. 尝试确保类属性中存在AuthorizationServiceInterface$provides
  2. 尝试用清除缓存bin/cake cache clear_all
  3. 尝试对服务提供商进行重新排序,看看是否有任何影响Application::services()

最终,我希望服务容器能够使用我的方法解析,并将其传递给需要它的服务类。AuthorizationServiceInterfacegetAuthorizationService()

依赖注入 授权 cakephp-4.x

评论


答: 暂无答案