$builder = new ContainerBuilder();
$definitions = [
ServiceIds::TRANSPORT_SYNC => static function (ContainerInterface $container) {
return new SyncTransport($container->get(ServiceIds::SYNC_BUS));
},
ServiceIds::TRANSPORT_ACTIVITY => new InMemoryTransport(),
ServiceIds::TRANSPORT_WORKFLOW => new InMemoryTransport(),
EventDispatcherInterface::class => new EventDispatcher(),
WorkflowRepositoryInterface::class => new WorkflowRepository(),
ActivityRepositoryInterface::class => new ActivityRepository(),
ServiceIds::SYNC_BUS => factory(
static function (ContainerInterface $container): MessageBus {
return new MessageBus(
[
new HandleMessageMiddleware(
new HandlersLocator(
[
NotifyToMattermostMessage1::class => [new NotifyToMattermostMessageHandler1()],
ActivityMessage::class => [
$container->get(ActivityMessageHandler::class)
],
WorkflowMessage::class => [
new WorkflowMessageHandler(
$container->get(WorkflowRepositoryInterface::class),
$container->get(EventDispatcherInterface::class),
$container->get(ActivityRepositoryInterface::class),
$container->get(ServiceIds::ACTIVITY_BUS),
),
]
]
)
),
]
);
}
),
ServiceIds::WORKFLOW_BUS => factory(
static function (ContainerInterface $container): MessageBus {
return new MessageBus(
[
new SendMessageMiddleware(
new SendersLocator(
[
WorkflowMessage::class => [ServiceIds::TRANSPORT_WORKFLOW]
],
$container
),
$container->get(EventDispatcherInterface::class)
),
new HandleMessageMiddleware(
new HandlersLocator(
[
WorkflowMessage::class => [
new WorkflowMessageHandler(
$container->get(WorkflowRepositoryInterface::class),
$container->get(EventDispatcherInterface::class),
$container->get(ActivityRepositoryInterface::class),
$container->get(ServiceIds::ACTIVITY_BUS),
),
],
]
)
),
]
);
}
),
ServiceIds::ACTIVITY_BUS => factory(
static function (ContainerInterface $container): MessageBus {
return new MessageBus(
[
new SendMessageMiddleware(
new SendersLocator(
[
ActivityMessage::class => [ServiceIds::TRANSPORT_ACTIVITY]
],
$container
),
$container->get(EventDispatcherInterface::class)
),
new HandleMessageMiddleware(
new HandlersLocator(
[
ActivityMessage::class => [
$container->get(ActivityMessageHandler::class)
],
]
)
),
]
);
}
),
ActivityMessageHandler::class => \DI\create(ActivityMessageHandler::class)
->constructor(
get(ActivityRepositoryInterface::class),
get(EventDispatcherInterface::class),
get(ServiceIds::WORKFLOW_BUS),
get(ServiceIds::SYNC_BUS),
)
->lazy(),
WorkflowService::class => factory(
static function (ContainerInterface $container): WorkflowService {
return new WorkflowService(
$container->get(WorkflowRepositoryInterface::class),
$container->get(ServiceIds::WORKFLOW_BUS)
);
}
),
];
$builder->addDefinitions($definitions);
$container = $builder->build();
сам Mesenger требует DI
SendersLocatorInterface
без использования контейнераContainerInterface
Symfony\Component\DependencyInjection\ServiceLocator
в качестве локатора