Skip to content

Commit 16ad4bb

Browse files
committed
introduce factory usage
1 parent 9c525eb commit 16ad4bb

File tree

2 files changed

+32
-14
lines changed

2 files changed

+32
-14
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
},
2727
"require": {
2828
"symfony/http-kernel": "^5.4",
29-
"apacheborys/re-try-php": "^0.15.1",
29+
"apacheborys/re-try-php": "^0.15.4",
3030
"symfony/config": "^5.4",
3131
"symfony/dependency-injection": "^5.4",
3232
"symfony/console": "^5.4",

src/DependencyInjection/RetryExtension.php

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
use ApacheBorys\Retry\ExceptionHandler;
77
use ApacheBorys\Retry\HandlerExceptionDeclarator\PublicCallbackDeclarator;
8+
use ApacheBorys\Retry\HandlerFactory;
89
use ApacheBorys\Retry\MessageHandler;
910
use Psr\Container\ContainerInterface;
1011
use Psr\Log\LoggerInterface;
@@ -25,26 +26,43 @@ public function load(array $configs, ContainerBuilder $container): void
2526
$configuration = new ConfigSchema();
2627
$config = $this->processConfiguration($configuration, $configs);
2728

29+
$this->normalizeConfig($config);
30+
31+
$container->setDefinition(
32+
'retry.exception_handler_factory',
33+
new Definition(HandlerFactory::class, [$config, new Reference(LoggerInterface::class)])
34+
);
35+
36+
$container->setDefinition(ExceptionHandler::class, $this->defineExceptionHandler());
37+
38+
$container->setDefinition(MessageHandler::class, $this->defineMessageHandler());
39+
}
40+
41+
private function normalizeConfig(array &$config): void
42+
{
2843
if (!isset($config['handlerExceptionDeclarator'])) {
2944
$config['handlerExceptionDeclarator']['class'] = PublicCallbackDeclarator::class;
3045
$config['handlerExceptionDeclarator']['arguments'] = [];
3146
}
47+
}
3248

33-
$definitionForExceptionHandler = new Definition(
34-
ExceptionHandler::class,
35-
[$config, new Reference(LoggerInterface::class), new Reference(ContainerInterface::class)]
36-
);
37-
$definitionForExceptionHandler->addMethodCall('initHandler');
38-
$definitionForExceptionHandler->setPublic(true);
49+
private function defineExceptionHandler(): Definition
50+
{
51+
$exceptionHandlerDefinition = new Definition(ExceptionHandler::class);
52+
$exceptionHandlerDefinition->setFactory([new Reference('retry.exception_handler_factory'), 'createExceptionHandler']);
53+
$exceptionHandlerDefinition->addArgument(new Reference(ContainerInterface::class));
54+
$exceptionHandlerDefinition->setPublic(true);
3955

40-
$container->setDefinition(ExceptionHandler::class, $definitionForExceptionHandler);
56+
return $exceptionHandlerDefinition;
57+
}
4158

42-
$definitionForMessageHandler = new Definition(
43-
MessageHandler::class,
44-
[$config, new Reference(LoggerInterface::class), new Reference(ContainerInterface::class)]
45-
);
46-
$definitionForMessageHandler->setPublic(true);
59+
private function defineMessageHandler(): Definition
60+
{
61+
$messageHandlerDefinition = new Definition(MessageHandler::class);
62+
$messageHandlerDefinition->setFactory([new Reference('retry.exception_handler_factory'), 'createMessageHandler']);
63+
$messageHandlerDefinition->addArgument(new Reference(ContainerInterface::class));
64+
$messageHandlerDefinition->setPublic(true);
4765

48-
$container->setDefinition(MessageHandler::class, $definitionForMessageHandler);
66+
return $messageHandlerDefinition;
4967
}
5068
}

0 commit comments

Comments
 (0)