public function testSerializeAndUnserializeOfReflection() { $this->container->setAutoResolve(false); $this->container->params['Aura\\Di\\FakeParamsClass'] = array('array' => array(), 'empty' => 'abc'); $instance = $this->container->newInstance('Aura\\Di\\FakeParamsClass'); $this->assertInstanceOf('Aura\\Di\\FakeParamsClass', $instance); $this->container = serialize($this->container); $this->container = unserialize($this->container); $instance = $this->container->newInstance('Aura\\Di\\FakeParamsClass', array('array' => array('a' => 1))); $this->assertInstanceOf('Aura\\Di\\FakeParamsClass', $instance); }
/** * * Creates a new DI container, adds pre-existing service objects, applies * Config classes to define() services, locks the container, and applies * the Config instances to modify() services. * * @param array $services Pre-existing service objects to set into the * container. * * @param array $configClasses A list of Config classes to instantiate and * invoke for configuring the container. * * @param bool $autoResolve Enable or disable auto-resolve after the * define() step? * * @return Container * */ public function newInstance(array $services = [], array $configClasses = [], $autoResolve = true) { $di = new Container(new Factory()); $di->setAutoResolve($autoResolve); foreach ($services as $key => $val) { $di->set($key, $val); } $configs = []; foreach ($configClasses as $class) { $configs[] = $config = is_string($class) ? $di->newInstance($class) : $class; $config->define($di); } $di->lock(); foreach ($configs as $config) { $config->modify($di); } return $di; }