Я работаю над проектом Symfony3 и играю с «новым» механизмом внедрения зависимостей. Может кто-нибудь, пожалуйста, объясните мне следующее поведение, пожалуйста:
это моя установка:
services.yml
services:
_defaults:
autowire: true
autoconfigure: true
public: false
MyBundle\Controller\:
resource: '../../Controller/'
public: true
tags: ['controller.service_arguments']
MyBundle\A:
public:false
Контроллер Сценарий А
<?php
namespace MyBundle\Controller;
use ...
class RootController extends Controller
{
/**
* @Route("/", name="root")
*/
public function indexAction(A $a) <- INJECTION HERE
{
$b = $this->get(A::class); // NO EXCEPTION THROWN HERE
return new Response();
}
}
Контроллер Сценарий B
<?php
namespace MyBundle\Controller;
use ...
class RootController extends Controller
{
/**
* @Route("/", name="root")
*/
public function indexAction() // <- NO INJECTION
{
$b = $this->get(A::class); // EXCEPTION THROWN HERE
return new Response();
}
}
Я пытаюсь получить службу A
внутри indexAction
из контейнера. Поскольку я пометил его как приватный в своем services.yml
, я ожидаю исключения при попытке его захватить (как в Scenario B
). Но в Scenario A
я не получаю исключение, потому что служба A
уже была внедрена (автоматически подключена) в контроллер.
(здесь (ожидаемое) исключение из сценария B: You have requested a non-existent service "MyBundle\A".
)
Может кто-нибудь объяснить это поведение, пожалуйста.
ваше здоровье