* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Bridge\ProxyManager\LazyProxy\Instantiator; use ProxyManager\Configuration; use ProxyManager\Factory\LazyLoadingValueHolderFactory; use ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy; use ProxyManager\Proxy\LazyLoadingInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\LazyProxy\Instantiator\InstantiatorInterface; /** * Runtime lazy loading proxy generator. * * @author Marco Pivetta */ class RuntimeInstantiator implements InstantiatorInterface { /** * @var LazyLoadingValueHolderFactory */ private $factory; public function __construct() { $config = new Configuration(); $config->setGeneratorStrategy(new EvaluatingGeneratorStrategy()); if (method_exists('ProxyManager\Version', 'getVersion')) { $this->factory = new LazyLoadingValueHolderFactoryV2($config); } else { $this->factory = new LazyLoadingValueHolderFactoryV1($config); } } /** * {@inheritdoc} */ public function instantiateProxy(ContainerInterface $container, Definition $definition, $id, $realInstantiator) { return $this->factory->createProxy( $definition->getClass(), function (&$wrappedInstance, LazyLoadingInterface $proxy) use ($realInstantiator) { $wrappedInstance = \call_user_func($realInstantiator); $proxy->setProxyInitializer(null); return true; } ); } }