Как исключить домен из автопроводки при объявлении сервиса с Symfony 4.1.3? - PullRequest
0 голосов
/ 12 сентября 2018

Я работаю над легким DDD-приложением с Symfony 4. В своем файле services.yaml я настроил автоматическое подключение следующим образом:

services:
# default configuration for services in *this* file
_defaults:
    autowire: true      # Automatically injects dependencies in your services.
    autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
    public: false       # Allows optimizing the container by removing unused services; this also means
                        # fetching services directly from the container via $container->get() won't work.
                        # The best practice is to be explicit about your dependencies anyway.

# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
    resource: '../src/*'
    exclude: '../src/{DataFixtures,Migrations,Tests,Domain/IceCream/IceCream.php,Domain/Cake/Cake.php,Domain/Candy/Candy.php}'

Я исключил все объекты, поскольку они не являются службами. Как вы могли заметить, я перечислил все соответствующие файлы, потому что, когда я печатаю:

exclude: '../src/{DataFixtures,Migrations,Tests,Domain}'

Возникло исключение времени выполнения: Cannot autowire service : "App\Application\Query\Cake\CakesQueryHandler": argument "$cakeRepository" of method "__construct()" references interface "App\Domain\Cake\CakeRepositoryInterface" but no such service exists. You should maybe alias this interface to the existing "App\Infrastructure\Doctrine\Repository\Cake\CakeRepository" service. Первый сервис, который является обработчиком запросов, не подключен автоматически.

Как я могу исключить весь Домен без необходимости вводить все файлы в нем?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 12 сентября 2018

Как вы прямо сказали мне, ошибка времени выполнения у вас:

(1/1) RuntimeException Cannot autowire service "App\Application\Query\Cake\CakesQueryHandler": argument "$cakeRepository" of method "__construct()" references interface "App\Domain\Cake\CakeRepositoryInterface" but no such service exists. You should maybe alias this interface to the existing "App\Infrastructure\Doctrine\Repository\Cake\CakeRepository" service.

В вашем обработчике запросов вы хотите внедрить службу, набранную как App\Domain\Cake\CakeRepositoryInterface.

На самом деле вы объявили службу для хранилища вашей категории с именем: App\Infrastructure\Doctrine\Repository\Cake\CakeRepository.

Чтобы это исправить, вам нужно добавить псевдоним из вашего интерфейса в ваш репозиторий в файле services.yaml:

App\Domain\Cake\CakeRepositoryInterface: '@App\Infrastructure\Doctrine\Repository\Cake\CakeRepository'

...