首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >私人服务及社会服务4

私人服务及社会服务4
EN

Stack Overflow用户
提问于 2018-07-17 09:05:22
回答 1查看 2.7K关注 0票数 6

我正在尝试将我的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“服务或别名已被删除或内联。要么将其公开,要么停止直接使用容器,转而使用依赖项注入。

在下面的编译器传递中,在$definitionsvendor/symfony/framework-bundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php中找不到我的私有服务

问题应该是什么?

已更新

这里的定义是:

代码语言:javascript
运行
复制
    <service id="my.service"
             class="My\Bundle\GreatService">
        <argument type="service" id="doctrine.orm.entity_manager" />
    </service>

更新(再次)

这里是单元测试

代码语言:javascript
运行
复制
<?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');
    }
//...
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-17 13:04:06

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

1.将services_test.yaml添加到config文件夹中,内容如下:

代码语言:javascript
运行
复制
services:
  _defaults:
    public: true

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

2.现在您可以从您的集装箱获得服务:

代码语言:javascript
运行
复制
$this->myService = self::$container->get('test.my.service')

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51377317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档