PluginProbe
Defender Security – Malware Scanner, Login Security & Firewall / 5.6.0
Defender Security – Malware Scanner, Login Security & Firewall v5.6.0
6.3.0 6.2.3 6.2.4 6.2.0 6.2.1 6.2.2 6.1.0 5.3.1 5.4.0 5.4.1 5.5.0 5.5.1 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.7.2 5.8.0 5.8.1 5.9.0 6.0.0 6.0.1 3.0.1 3.1.0 All 141 releases
defender-security / lib / packages / DI / Definition / Resolver / ResolverDispatcher.php

ResolverDispatcher.php in Defender Security – Malware Scanner, Login Security & Firewall 5.6.0, at lib/packages/DI/Definition/Resolver/ResolverDispatcher.php

135 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace WPMU_DEV\Defender\Vendor\DI\Definition\Resolver;
6
7 use WPMU_DEV\Defender\Vendor\DI\Definition\ArrayDefinition;
8 use WPMU_DEV\Defender\Vendor\DI\Definition\DecoratorDefinition;
9 use WPMU_DEV\Defender\Vendor\DI\Definition\Definition;
10 use WPMU_DEV\Defender\Vendor\DI\Definition\EnvironmentVariableDefinition;
11 use WPMU_DEV\Defender\Vendor\DI\Definition\Exception\InvalidDefinition;
12 use WPMU_DEV\Defender\Vendor\DI\Definition\FactoryDefinition;
13 use WPMU_DEV\Defender\Vendor\DI\Definition\InstanceDefinition;
14 use WPMU_DEV\Defender\Vendor\DI\Definition\ObjectDefinition;
15 use WPMU_DEV\Defender\Vendor\DI\Definition\SelfResolvingDefinition;
16 use WPMU_DEV\Defender\Vendor\DI\Proxy\ProxyFactory;
17 use WPMU_DEV\Defender\Vendor\Psr\Container\ContainerInterface;
18
19 /**
20 * Dispatches to more specific resolvers.
21 *
22 * Dynamic dispatch pattern.
23 *
24 * @since 5.0
25 * @author Matthieu Napoli <[email protected]>
26 */
27 class ResolverDispatcher implements DefinitionResolver
28 {
29 /**
30 * @var ContainerInterface
31 */
32 private $container;
33
34 /**
35 * @var ProxyFactory
36 */
37 private $proxyFactory;
38
39 private $arrayResolver;
40 private $factoryResolver;
41 private $decoratorResolver;
42 private $objectResolver;
43 private $instanceResolver;
44 private $envVariableResolver;
45
46 public function __construct(ContainerInterface $container, ProxyFactory $proxyFactory)
47 {
48 $this->container = $container;
49 $this->proxyFactory = $proxyFactory;
50 }
51
52 /**
53 * Resolve a definition to a value.
54 *
55 * @param Definition $definition Object that defines how the value should be obtained.
56 * @param array $parameters Optional parameters to use to build the entry.
57 *
58 * @throws InvalidDefinition If the definition cannot be resolved.
59 *
60 * @return mixed Value obtained from the definition.
61 */
62 public function resolve(Definition $definition, array $parameters = [])
63 {
64 // Special case, tested early for speed
65 if ($definition instanceof SelfResolvingDefinition) {
66 return $definition->resolve($this->container);
67 }
68
69 $definitionResolver = $this->getDefinitionResolver($definition);
70
71 return $definitionResolver->resolve($definition, $parameters);
72 }
73
74 public function isResolvable(Definition $definition, array $parameters = []) : bool
75 {
76 // Special case, tested early for speed
77 if ($definition instanceof SelfResolvingDefinition) {
78 return $definition->isResolvable($this->container);
79 }
80
81 $definitionResolver = $this->getDefinitionResolver($definition);
82
83 return $definitionResolver->isResolvable($definition, $parameters);
84 }
85
86 /**
87 * Returns a resolver capable of handling the given definition.
88 *
89 * @throws \RuntimeException No definition resolver was found for this type of definition.
90 */
91 private function getDefinitionResolver(Definition $definition) : DefinitionResolver
92 {
93 switch (true) {
94 case $definition instanceof ObjectDefinition:
95 if (! $this->objectResolver) {
96 $this->objectResolver = new ObjectCreator($this, $this->proxyFactory);
97 }
98
99 return $this->objectResolver;
100 case $definition instanceof DecoratorDefinition:
101 if (! $this->decoratorResolver) {
102 $this->decoratorResolver = new DecoratorResolver($this->container, $this);
103 }
104
105 return $this->decoratorResolver;
106 case $definition instanceof FactoryDefinition:
107 if (! $this->factoryResolver) {
108 $this->factoryResolver = new FactoryResolver($this->container, $this);
109 }
110
111 return $this->factoryResolver;
112 case $definition instanceof ArrayDefinition:
113 if (! $this->arrayResolver) {
114 $this->arrayResolver = new ArrayResolver($this);
115 }
116
117 return $this->arrayResolver;
118 case $definition instanceof EnvironmentVariableDefinition:
119 if (! $this->envVariableResolver) {
120 $this->envVariableResolver = new EnvironmentVariableResolver($this);
121 }
122
123 return $this->envVariableResolver;
124 case $definition instanceof InstanceDefinition:
125 if (! $this->instanceResolver) {
126 $this->instanceResolver = new InstanceInjector($this, $this->proxyFactory);
127 }
128
129 return $this->instanceResolver;
130 default:
131 throw new \RuntimeException('No definition resolver was configured for definition of type ' . get_class($definition));
132 }
133 }
134 }
135