@@ -161,19 +161,13 @@ the correct tag:
161
161
# config/services.yaml
162
162
163
163
# put this after the "App\" line that registers all your services
164
- command_handlers :
165
- namespace : App\MessageHandler\
166
- resource : ' %kernel.project_dir%/src/MessageHandler/*CommandHandler.php'
167
- autoconfigure : false
168
- tags :
169
- - { name: messenger.message_handler, bus: command.bus }
170
-
171
- query_handlers :
172
- namespace : App\MessageHandler\
173
- resource : ' %kernel.project_dir%/src/MessageHandler/*QueryHandler.php'
174
- autoconfigure : false
175
- tags :
176
- - { name: messenger.message_handler, bus: query.bus }
164
+ _instanceof :
165
+ App\MessageHandler\CommandHandlerInterface :
166
+ tags :
167
+ - { name: messenger.message_handler, bus: command.bus }
168
+ App\MessageHandler\QueryHandlerInterface :
169
+ tags :
170
+ - { name: messenger.message_handler, bus: query.bus }
177
171
178
172
.. code-block :: xml
179
173
@@ -186,31 +180,40 @@ the correct tag:
186
180
187
181
<services >
188
182
<!-- command handlers -->
189
- <prototype namespace =" App\MessageHandler\" resource = " %kernel.project_dir%/src/MessageHandler/*CommandHandler.php " autoconfigure = " false " >
190
- <tag name =" messenger.message_handler" bus =" command.bus" />
191
- </service >
183
+ <instanceof id =" App\MessageHandler\CommandHandlerInterface " autowire = " true " >
184
+ <tag name =" messenger.message_handler" , bus =" command.bus" />
185
+ </instanceof >
192
186
<!-- query handlers -->
193
- <prototype namespace =" App\MessageHandler\" resource = " %kernel.project_dir%/src/MessageHandler/*QueryHandler.php " autoconfigure = " false " >
194
- <tag name =" messenger.message_handler" bus =" query.bus" />
195
- </service >
187
+ <instanceof id =" App\MessageHandler\QueryHandlerInterface " autowire = " true " >
188
+ <tag name =" messenger.message_handler" , bus =" query.bus" />
189
+ </instanceof >
196
190
</services >
197
191
</container >
198
192
199
193
.. code-block :: php
200
194
201
195
// config/services.php
196
+ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
202
197
203
- // Command handlers
204
- $container->services()
205
- ->load('App\MessageHandler\\', '%kernel.project_dir%/src/MessageHandler/*CommandHandler.php')
206
- ->autoconfigure(false)
207
- ->tag('messenger.message_handler', ['bus' => 'command.bus']);
198
+ use App\MessageHandler\CommandHandlerInterface;
199
+ use App\MessageHandler\QueryHandlerInterface;
208
200
209
- // Query handlers
210
- $container->services()
211
- ->load('App\MessageHandler\\', '%kernel.project_dir%/src/MessageHandler/*QueryHandler.php')
212
- ->autoconfigure(false)
213
- ->tag('messenger.message_handler', ['bus' => 'query.bus']);
201
+ return function(ContainerConfigurator $configurator) {
202
+ $services = $configurator->services();
203
+
204
+ // Command handlers
205
+ $services
206
+ ->instanceof(CommandHandlerInterface::class)
207
+ ->tag('messenger.message_handler', ['bus' => 'command.bus']);
208
+
209
+ // Query handlers
210
+ $services
211
+ ->instanceof(QueryHandlerInterface::class)
212
+ ->tag('messenger.message_handler', ['bus' => 'query.bus']);
213
+
214
+ };
215
+
216
+ From now any handler implementing ``CommandHandlerInterface `` will be automatically restricted to ``command.bus `` bus. The same is true for ``query.bus `` bus - just implement ``QueryHandlerInterface `` interface.
214
217
215
218
Debugging the Buses
216
219
-------------------
0 commit comments