3131use WonderNetwork \SlimKernel \Messenger \CommandBus ;
3232use WonderNetwork \SlimKernel \Messenger \QueryBus ;
3333use WonderNetwork \SlimKernel \ServiceFactory ;
34+ use WonderNetwork \SlimKernel \ServiceOfExpectedType ;
3435use WonderNetwork \SlimKernel \ServicesBuilder ;
3536use WonderNetwork \SlimKernel \Supervisor \GenerateSupervisorConfigCommand ;
3637use WonderNetwork \SlimKernel \Supervisor \SupervisorConfiguration ;
@@ -78,10 +79,25 @@ public function __invoke(ServicesBuilder $builder): iterable {
7879
7980 // region senders
8081 yield TransportLocatorBuilder::class => $ this ->transports ?? TransportLocatorBuilder::empty ();
81- yield SendersLocator::class => function (TransportLocatorBuilder $ config , ContainerInterface $ container ) {
82+ yield CommandBusDependencies::SendersLocator->value => fn (
83+ TransportLocatorBuilder $ config ,
84+ ContainerInterface $ container ,
85+ ) => $ config ->sendersLocator ($ container );
86+ yield CommandBusDependencies::ReceiversLocator->value => fn (
87+ TransportLocatorBuilder $ config ,
88+ ContainerInterface $ container ,
89+ ) => $ config ->receiversLocator ($ container );
90+
91+ yield SendersLocator::class => function (ContainerInterface $ container ) {
92+ $ sendersLocator = ServiceOfExpectedType::getFromContainer (
93+ container: $ container ,
94+ key: CommandBusDependencies::SendersLocator->value ,
95+ expectedType: ContainerInterface::class,
96+ );
97+
8298 return new SendersLocator (
8399 sendersMap: [],
84- sendersLocator: $ config -> sendersLocator ( $ container ) ,
100+ sendersLocator: $ sendersLocator ,
85101 );
86102 };
87103
@@ -101,12 +117,26 @@ public function __invoke(ServicesBuilder $builder): iterable {
101117 yield QueryBus::class => autowire ();
102118
103119 yield ConsumeMessagesCommand::class => function (TransportLocatorBuilder $ config , ContainerInterface $ container ) {
104- /** @var LoggerInterface $logger */
105- $ logger = $ container ->get (CommandBusDependencies::Logger->value );
106- /** @var CacheItemPoolInterface $pool */
107- $ pool = $ container ->get (CommandBusDependencies::CachePool->value );
108- /** @var EventDispatcher $eventDispatcher */
109- $ eventDispatcher = $ container ->get (CommandBusDependencies::EventDispatcher->value );
120+ $ logger = ServiceOfExpectedType::getFromContainer (
121+ container: $ container ,
122+ key: CommandBusDependencies::Logger->value ,
123+ expectedType: LoggerInterface::class,
124+ );
125+ $ pool = ServiceOfExpectedType::getFromContainer (
126+ container: $ container ,
127+ key: CommandBusDependencies::CachePool->value ,
128+ expectedType: CacheItemPoolInterface::class,
129+ );
130+ $ receiversLocator = ServiceOfExpectedType::getFromContainer (
131+ container: $ container ,
132+ key: CommandBusDependencies::ReceiversLocator->value ,
133+ expectedType: ContainerInterface::class,
134+ );
135+ $ eventDispatcher = ServiceOfExpectedType::getFromContainer (
136+ container: $ container ,
137+ key: CommandBusDependencies::EventDispatcher->value ,
138+ expectedType: EventDispatcher::class,
139+ );
110140 $ eventDispatcher ->addSubscriber (
111141 new StopWorkerOnRestartSignalListener (
112142 cachePool: $ pool ,
@@ -121,9 +151,11 @@ public function __invoke(ServicesBuilder $builder): iterable {
121151 busLocator: new Container (),
122152 fallbackBus: $ container ->get (MessageBusInterface::class),
123153 ),
124- receiverLocator: $ config -> receiversLocator ( $ container ) ,
154+ receiverLocator: $ receiversLocator ,
125155 eventDispatcher: $ eventDispatcher ,
126156 logger: $ logger ,
157+ // if it works, it works.
158+ // if we override the receivers locator, then we’re out of luck
127159 receiverNames: array_keys ($ config ->receivers ),
128160 );
129161 };
@@ -140,8 +172,11 @@ public function __invoke(ServicesBuilder $builder): iterable {
140172
141173 yield CommandBusDependencies::Worker->value => function (ContainerInterface $ container ) {
142174 $ app = new Application ('worker ' );
143- /** @var EventDispatcher $eventDispatcher */
144- $ eventDispatcher = $ container ->get (CommandBusDependencies::EventDispatcher->value );
175+ $ eventDispatcher = ServiceOfExpectedType::getFromContainer (
176+ container: $ container ,
177+ key: CommandBusDependencies::EventDispatcher->value ,
178+ expectedType: EventDispatcher::class,
179+ );
145180
146181 $ app ->setDispatcher ($ eventDispatcher );
147182 $ app ->addCommands (
0 commit comments