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;
 }