/**
  * @inheritDoc
  */
 public function canInject(&$instance, Dependency $dependency) : bool
 {
     foreach ($this->getDependencyInterfaces($dependency->getValue()) as $interface) {
         $injectionInterfaceName = $interface . 'Aware';
         if (is_subclass_of($dependency->getValue(), $injectionInterfaceName)) {
             return true;
         }
     }
     return false;
 }
 /**
  * @inheritDoc
  */
 public function canInject(&$instance, Dependency $dependency) : bool
 {
     if (!$dependency instanceof PropertyDependency) {
         return false;
     }
     $adderName = $this->getAdderName($instance, $dependency->getPropertyName());
     if (empty($adderName)) {
         return false;
     }
     return true;
 }
 /**
  * @inheritDoc
  */
 public function canInject(&$instance, Dependency $dependency) : bool
 {
     if (!$dependency instanceof PropertyDependency) {
         return false;
     }
     $reflectionClass = new \ReflectionClass($instance);
     $propertyName = $dependency->getPropertyName();
     try {
         $reflectionClass->getProperty($propertyName);
     } catch (\Exception $e) {
         return false;
     }
     return true;
 }
 /**
  * @param Dependency $dependency
  * @return string
  */
 protected function getFavoriteStrategyDependencyTag(Dependency $dependency)
 {
     if ($dependency instanceof PropertyDependency) {
         $tag = 'property:' . $dependency->getPropertyName();
     } else {
         $value = $dependency->getValue();
         if (gettype($value) !== 'object') {
             $tag = 'type:' . gettype($value);
         } else {
             $tag = 'type:' . get_class($value);
         }
     }
     return $tag;
 }