///-------------------------------------------------------------------------------------------------
        /// <summary>
        ///  Releases the unmanaged resources used by the Hyperstore.Modeling.Domain.DomainModel and
        ///  optionally releases the managed resources.
        /// </summary>
        /// <param name="disposing">
        ///  true to release both managed and unmanaged resources; false to release only unmanaged
        ///  resources.
        /// </param>
        ///-------------------------------------------------------------------------------------------------
        protected virtual void Dispose(bool disposing)
        {
            var tmp = DomainUnloaded;

            if (tmp != null)
            {
                tmp(this, new EventArgs());
            }

            if (L1Cache != null)
            {
                L1Cache.Dispose();
            }

            var disposable = InnerGraph as IDisposable;

            if (disposable != null)
            {
                disposable.Dispose();
            }
            InnerGraph = null;

            disposable = _commandManager as IDisposable;
            if (disposable != null)
            {
                disposable.Dispose();
            }
            _commandManager = null;

            disposable = _eventManager as IDisposable;
            if (disposable != null)
            {
                disposable.Dispose();
            }
            _eventManager = null;

            disposable = IdGenerator as IDisposable;
            if (disposable != null)
            {
                disposable.Dispose();
            }
            IdGenerator = null;

            disposable = _modelElementFactory as IDisposable;
            if (disposable != null)
            {
                disposable.Dispose();
            }
            _modelElementFactory = null;

            Services.Dispose();
            _disposed = true;
        }
        ///-------------------------------------------------------------------------------------------------
        /// <summary>
        ///  Determines if we can configure core.
        /// </summary>
        /// <returns>
        ///  true if it succeeds, false if it fails.
        /// </returns>
        ///-------------------------------------------------------------------------------------------------
        protected virtual bool ConfigureCore()
        {
            if (_initialized)
            {
                return(true);
            }

            _initialized = true;
            Statistics   = new DomainStatistics();

            OnInitializing();

            _eventManager        = Resolve(ResolveEventManager);
            IdGenerator          = Resolve(ResolveIdGenerator);
            _modelElementFactory = Resolve(ResolveModelElementFactory);
            _commandManager      = Resolve(ResolveCommandManager);
            InnerGraph           = Resolve(ResolveHyperGraph);
            L1Cache = new Level1Cache(this);

            OnInitialized();

            return(false);
        }