【问题标题】:Autoconfiguration replace imported services自动配置替换导入的服务
【发布时间】:2020-10-13 05:27:42
【问题描述】:

当我在主配置中导入服务时:

imports:
    - { resource: services/attribute_loaders.yaml }

包含文件中的服务将替换为自动配置的版本,所以我错过了所有配置的标签:

services:
  App\Infrastructure\Bridge\Doctrine\EventListener\AttributeLoader\OrderAttributeLoader:
    autowire: true
    tags:
      - name: 'doctrine_mongodb.odm.event_listener'
        entity: 'App\Infrastructure\Bridge\Doctrine\EventListener\AttributeLoader\OrderAttributeLoader'
        event: 'postLoad'

作为一种解决方法,我已将我的服务从自动配置中排除。

有没有办法将服务分解成多个文件?

【问题讨论】:

    标签: php symfony dependency-injection


    【解决方案1】:

    这正是你的做法。

    如果你打算使用多个文件来配置你的服务,你根本不能定义同一个服务两次。

    您的定义需要足够具体,以免它们重叠。

    如果您要使用广泛的resource 设置,则需要添加所有相应的排除项,以便在时间之前不会定义不同文件中定义的服务:

    services:
      App\:
         resource: '../src/*'
         exclude:
           - '../src/Infrastructure/Symfony/DependencyInjection'
           - '../src/Infrastructure/Symfony/Kernel.php'
           - '../src/Tests'
           - '../src/Messenger'
    

    src/Messenger 上属于 App\Messenger 命名空间的服务可以在不同的文件中独立定义:

    例如像这样:

    # messenger_services.yaml
    services:
        _defaults:
            autowire: true      # Automatically injects dependencies in your services.
            autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
            public: false
    
        
        App\Messenger\CommandHandler\:
            resource: '../../src/Messenger/CommandHandler/*'
            tags:
              - {name: 'messenger.message_handler', bus: command.bus}
    
        App\Messenger\EventHandler\:
            resource: '../../src/Application/EventHandler/*'
            tags:
              - {name: 'messenger.message_handler', bus: event.bus}
    

    【讨论】:

      猜你喜欢
      • 2022-12-19
      • 2019-09-15
      • 1970-01-01
      • 2021-06-26
      • 2015-08-20
      • 1970-01-01
      • 2018-04-27
      • 2018-12-25
      • 1970-01-01
      相关资源
      最近更新 更多