/**
* Creates a new Document that operates on the given Mongo connection
* and uses the given Configuration.
*
* @param \Doctrine\MongoDB\Connection|null $conn
* @param Configuration|null $config
* @param \Doctrine\Common\EventManager|null $eventManager
*/
protected function __construct(Connection $conn = null, Configuration $config = null, EventManager $eventManager = null)
{
$this->config = $config ?: new Configuration();
$this->eventManager = $eventManager ?: new EventManager();
$this->connection = $conn ?: new Connection(null, array(), $this->config, $this->eventManager);
$metadataFactoryClassName = $this->config->getClassMetadataFactoryName();
$this->metadataFactory = new $metadataFactoryClassName();
$this->metadataFactory->setDocumentManager($this);
$this->metadataFactory->setConfiguration($this->config);
if ($cacheDriver = $this->config->getMetadataCacheImpl()) {
$this->metadataFactory->setCacheDriver($cacheDriver);
}
$hydratorDir = $this->config->getHydratorDir();
$hydratorNs = $this->config->getHydratorNamespace();
$this->hydratorFactory = new HydratorFactory($this, $this->eventManager, $hydratorDir, $hydratorNs, $this->config->getAutoGenerateHydratorClasses());
$this->unitOfWork = new UnitOfWork($this, $this->eventManager, $this->hydratorFactory);
$this->hydratorFactory->setUnitOfWork($this->unitOfWork);
$this->schemaManager = new SchemaManager($this, $this->metadataFactory);
$this->proxyFactory = new ProxyFactory($this, $this->config->getProxyDir(), $this->config->getProxyNamespace(), $this->config->getAutoGenerateProxyClasses());
}