/// <summary>
        /// Establishes the connection and initializes internal structures
        /// </summary>
        /// <param name="arg">Settings for the connection, model etc</param>
        /// <param name="policy">Policy for this datamanager</param>
        public DataManagerWithPolicy(ConnectionParameters arg, ExecutionPolicy policy)
        {
            Contract.Requires(!string.IsNullOrEmpty(arg.connection));
            Contract.Requires(!string.IsNullOrEmpty(arg.modelResource));

            KConnectionParameters = arg;
            KPolicy = policy;

            _creator = new CreationStrategy(KConnectionParameters, KPolicy);


            switch (KPolicy.PeriodicDisposalStrategy)
            {
            case Strategy.DisposeWithThread:
                _cleaner = new RemoveOnlyWhenThreadIsDead(_map, KPolicy);
                break;

            case Strategy.DisposeWhenNotInUse:
                _cleaner = new RemoveUnused(_map, KPolicy);
                break;

            case Strategy.DisposeLeastRecentlyUsed:
                _cleaner = new RemoveLeastRecentlyUsed(_map, KPolicy);
                break;

            default:
                this._cleaner = new CleaningStrategy(_map, KPolicy);
                break;
            }
            _cleaner.Start();
        }