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

私人服务和Symfony 4

夹谷鸿福
2023-03-14

我正在尝试将我的Symfony 3.4应用程序迁移到Symfony 4.1。

测试不起作用,因为服务默认是私有的(这是一个好消息)。

以下这篇文章:https://symfony.com/blog/new-in-symfony-4-1-simpler-service-testing,我仍然面临私人服务的问题:

Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException:“my.service”服务或别名在编译容器时已被删除或内联。您应该将其公开,或者停止直接使用容器,改用依赖项注入。

在以下编译器过程中,在$definitions中未找到我的私有服务:供应商/symfony/framework bundle/DependencyInjection/compiler/TestServiceContainerRealRefPass。php

有什么问题吗?

更新

以下是定义

    <service id="my.service"
             class="My\Bundle\GreatService">
        <argument type="service" id="doctrine.orm.entity_manager" />
    </service>

更新(再次)

这里是单元测试

<?php

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class MyServiceTest extends KernelTestCase
{
    protected $myService;

    public function setUp()
    {
        self::bootKernel();

        $this->myService = self::$container->get('my.service');
    }
//...
}

共有1个答案

陆宇航
2023-03-14

奇怪的是上面的代码不起作用。当我使用Symfony 4.0时,我使用了这样的技巧:

1.添加services_test.yamlconfig文件夹,内容如下:

services:
  _defaults:
    public: true

  test.my.service: "@my.service"

2.现在,您可以从容器获取服务:

$this->myService = self::$container->get('test.my.service')

顺便说一句,您是否将此服务注入到某个地方,因为未使用的服务在默认情况下会被删除(如果它们不是公共的或合成的)。

 类似资料:
  • 我有一个由两个Symfony应用程序使用的库,该库定义了一组我希望公开的服务(我希望能够通过容器直接检索这些服务)。当我尝试访问一个服务时,我有: 编译容器时,已删除或内联库\Service\DerivedServices\OneSpecific实现"服务或别名。您应该将其公开,或者直接停止使用容器,转而使用依赖注入。 问题是,所述服务是公开的。 基本上有: 一个库\服务\BaseService类

  • 这更像是一个服务人员的问题,尽管它可能更具体地针对Sapper。我真的不知道,因为我是第一个和服务人员打交道的人,我几乎没有使用过他们,而且经常觉得他们是个麻烦。 基本上,无论我做什么,我都无法让localhost:3000停止加载应用程序的旧副本。我以各种方式取消了服务工作人员的注册,包括尝试以编程方式取消注册。我清除了缓存,甚至清除了浏览器中的所有浏览数据。我的Sapper开发环境中的服务器未

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

  • 在github文档中找不到任何东西,在这里也找不到。但是我想知道是否可以有一个用于名为的私有存储库,该存储库可以访问,只有一个人可以访问存储库本身。 我记得曾经读过一些关于github页面总是公开的东西,但似乎再也找不到了。