当前位置: 首页 > 知识库问答 >
问题:

公共服务被视为私人服务

金伟
2023-03-14

我有一个由两个Symfony应用程序使用的库,该库定义了一组我希望公开的服务(我希望能够通过容器直接检索这些服务)。当我尝试访问一个服务时,我有:

编译容器时,已删除或内联库\Service\DerivedServices\OneSpecific实现"服务或别名。您应该将其公开,或者直接停止使用容器,转而使用依赖注入。

问题是,所述服务是公开的。

基本上有:

  • 一个库\服务\BaseService类,该类具有两个公共依赖项的setter(在此代码段中为原则和记录器);
  • 几个派生类(在库\Service\DerivedServices命名空间中),每个都定义了一个新的服务(用自己的构造函数直接处理DI)。

以下是我的服务定义:

# Base: inject common dependencies
Library\Service\BaseService:
  abstract: true
  calls:
    - [setDoctrine, ['@doctrine.orm.entity_manager']]
    - [setLogger, ['@Library\Service\Logger']]

# These services are public to be retrieved directly by the container interface
Library\Service\DerivedServices\:
  resource: '../vendor/company/library/src/Library/Service/DerivedServices'
  public: true
  autowire: true
  autoconfigure: false
  parent: Library\Service\BaseService

然后,Symfony应用程序检索一个派生服务,如:

$this->get('Library\Service\DerivedServices\OneSpecificImplementation');

这些没有任何区别:

  • 我已经改变了服务定义的顺序
  • 两个应用程序都运行Symfony 4.3.3

我认为在配置方面这是一个微不足道的问题,但我无法准确指出(在尝试调试框架为何将我的服务编译为私有服务2小时后,我认为可能有人有这个问题,并且可能会帮助我)。

共有1个答案

储峻
2023-03-14

事实证明,服务声明的顺序非常重要。正如我所认为的那样,问题在于配置。

我有:

Library\Service\BaseService:
  ...

Library\Service\DerivedServices\:
  ...

Library\Service\:
  resource: '../vendor/company/library/src/Library/Service'

最后一条指令将所有服务重新声明为私有(默认情况下)。
我将此更改为:

Library\Service\:
  resource: '../vendor/company/library/src/Library/Service'

Library\Service\BaseService:
  ...

Library\Service\DerivedServices\:
  ...

这首先声明所有服务为私有,然后用新的声明重新声明它们:使用父公共。

 类似资料:
  • 我有一个场景,我必须在AWS ECS上部署多个微服务。我想让服务能够通过每个微服务中开发的API相互通信。我想把前端也部署在AWS ECS上,可以公开访问,也可以与其他部署在AWS ECS上的微服务通信。我怎样才能做到这一点呢?我是否可以使用AWS ECS服务发现,将所有服务都放在一个专用子网中,以启用每个服务之间的通信?我可以使用弹性负载均衡器使前端微服务仅通过HTTP/HTTPS协议在inte

  • 我正在尝试将我的Symfony 3.4应用程序迁移到Symfony 4.1。 测试不起作用,因为服务默认是私有的(这是一个好消息)。 以下这篇文章:https://symfony.com/blog/new-in-symfony-4-1-simpler-service-testing,我仍然面临私人服务的问题: Symfony\Component\DependencyInjection\Except

  • 我正在aws中运行openshift 我有一个主节点和两个节点。如何向aws公共IP公开服务?我可以在内部访问服务: 我怎么把它暴露给公共IP呢?是否可以在openshfit web控制台中完成?我尝试使用https://docs.openshift.com/container-platform/3.4/dev_guide/expose_service/expose_internal_ip_ser

  • 4.4.1.2 创建/使用公共服务 公共服务是应该由未指定的大量应用使用的服务。 有必要注意,它可能会收到恶意软件发送的信息(意图等)。 在使用公共服务的情况下,有必要注意,恶意软件可能会收到要发送的信息(意图等)。 下面展示了如何使用startService类型服务的示例代码。 要点(创建服务): 将导出属性显式设置为true。 小心并安全地处理接收到的意图。 返回结果时,请勿包含敏感信息。 A

  • 我试图在解决方案中配置Business network Operator服务,方法是在我的应用程序中添加r3提供的工具箱作为corrdap依赖项。我能够构建应用程序,但当我运行nodes时,我收到Notary错误 更新 我正在添加日志

  • 首先:我是OPCUA的新手。:) 我正在尝试将Milo客户端连接到我们的服务器,但不真正了解出了什么问题。示例客户端和服务器一起工作很好,但当我尝试将客户端示例与公共OPC-UA-Test-Servers之一连接时,我得到了这些例外: 15:48:34.729[ua-netty-event-lop-0]DEBUGorg.eclipse.milo.opcua.stack.client.handler