/** * @param object $object * @param string $class * @param string $name * @param object|object[] $value */ public static function writeProperty($object, $class, $name, $value) { $rp = new Property($class, $name); if (!$rp->isPublic()) { $rp->setAccessible(TRUE); } $rp->setValue($object, $value); }
private function patchService($serviceId, Code\ClassType $advisedClass, Code\PhpNamespace $cg, $constructorInject = FALSE) { static $publicSetup; if ($publicSetup === NULL) { $refl = new Nette\Reflection\Property('Nette\\DI\\ServiceDefinition', 'setup'); $publicSetup = $refl->isPublic(); } $def = $this->getContainerBuilder()->getDefinition($serviceId); if ($def->getFactory()) { $def->setFactory(new Nette\DI\Statement($cg->getName() . '\\' . $advisedClass->getName())); } else { $def->setFactory($cg->getName() . '\\' . $advisedClass->getName()); } if (!$constructorInject) { $statement = new Nette\DI\Statement(AdvisedClassType::CG_INJECT_METHOD, ['@Nette\\DI\\Container']); if ($publicSetup) { array_unshift($def->setup, $statement); } else { $setup = $def->getSetup(); array_unshift($setup, $statement); $def->setSetup($setup); } } }