ConfigProvider.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * This file is part of Hyperf.
  5. *
  6. * @link https://www.hyperf.io
  7. * @document https://hyperf.wiki
  8. * @contact group@hyperf.io
  9. * @license https://github.com/hyperf/hyperf/blob/master/LICENSE
  10. */
  11. namespace Hyperf\Di;
  12. use Hyperf\Di\Annotation\AnnotationCollector;
  13. use Hyperf\Di\Annotation\AspectCollector;
  14. use Hyperf\Di\Annotation\InjectAspect;
  15. use Hyperf\Di\Aop\AstVisitorRegistry;
  16. use Hyperf\Di\Aop\PropertyHandlerVisitor;
  17. use Hyperf\Di\Aop\ProxyCallVisitor;
  18. use Hyperf\Di\Aop\RegisterInjectPropertyHandler;
  19. class ConfigProvider
  20. {
  21. public function __invoke(): array
  22. {
  23. // Register AST visitors to the collector.
  24. if (! AstVisitorRegistry::exists(PropertyHandlerVisitor::class)) {
  25. AstVisitorRegistry::insert(PropertyHandlerVisitor::class);
  26. }
  27. if (! AstVisitorRegistry::exists(ProxyCallVisitor::class)) {
  28. AstVisitorRegistry::insert(ProxyCallVisitor::class);
  29. }
  30. // Register Property Handler.
  31. RegisterInjectPropertyHandler::register();
  32. return [
  33. 'dependencies' => [
  34. MethodDefinitionCollectorInterface::class => MethodDefinitionCollector::class,
  35. ClosureDefinitionCollectorInterface::class => ClosureDefinitionCollector::class,
  36. ],
  37. 'aspects' => [
  38. InjectAspect::class,
  39. ],
  40. 'annotations' => [
  41. 'scan' => [
  42. 'paths' => [
  43. __DIR__,
  44. ],
  45. 'collectors' => [
  46. AnnotationCollector::class,
  47. AspectCollector::class,
  48. ],
  49. ],
  50. 'ignore_annotations' => [
  51. 'mixin',
  52. ],
  53. ],
  54. ];
  55. }
  56. }