/**
* @param CouchDBClient $couchClient
* @param Configuration $config
* @param EventManager $evm
*/
public function __construct(CouchDBClient $couchClient, Configuration $config = null, EventManager $evm = null)
{
$this->couchDBClient = $couchClient;
$this->config = $config ?: new Configuration();
$this->evm = $evm ?: new EventManager();
$this->metadataFactory = new ClassMetadataFactory($this);
$this->unitOfWork = new UnitOfWork($this);
$this->proxyFactory = new Proxy\ProxyFactory($this, $this->config->getProxyDir(), $this->config->getProxyNamespace(), $this->config->getAutoGenerateProxyClasses());
}