示例#1
0
        private void InitialiseCaching(TEnhancedOrgService enhancedService)
        {
            if (Parameters.IsCachingEnabled == true)
            {
                return;
            }

            ObjectCache cache;

            switch (Parameters.CachingParams.CacheScope)
            {
            case CacheScope.Global:
            case CacheScope.Factory:
                cache = factoryCache;
                break;

            case CacheScope.Service:
                cache = customCacheFactory == null
                                                ? new MemoryCache(Parameters.ConnectionParams.ConnectionString)
                                                : customCacheFactory(this, Parameters, enhancedService);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(Parameters.CachingParams.CacheScope));
            }

            OrganizationServiceCacheSettings cacheSettings = null;

            if (Parameters.CachingParams.Offset.HasValue)
            {
                cacheSettings =
                    new OrganizationServiceCacheSettings
                {
                    PolicyFactory = new CacheItemPolicyFactory(Parameters.CachingParams.Offset.Value, Parameters.CachingParams.Priority)
                };
            }

            if (Parameters.CachingParams.SlidingExpiration.HasValue)
            {
                cacheSettings =
                    new OrganizationServiceCacheSettings
                {
                    PolicyFactory = new CacheItemPolicyFactory(Parameters.CachingParams.SlidingExpiration.Value,
                                                               Parameters.CachingParams.Priority)
                };
            }

            enhancedService.Cache       = new OrganizationServiceCache(cache, cacheSettings);
            enhancedService.ObjectCache = cache;
        }
示例#2
0
        public OrganizationServiceCache(ObjectCache cache, OrganizationServiceCacheSettings settings)
        {
            var cacheSettings = settings ?? new OrganizationServiceCacheSettings();

            Cache      = cache ?? MemoryCache.Default;
            Mode       = OrganizationServiceCacheMode.LookupAndInsert;
            ReturnMode = OrganizationServiceCacheReturnMode.Cloned;

            ConnectionId                   = cacheSettings.ConnectionId;
            CacheRegionName                = cacheSettings.CacheRegionName;
            QueryHashingEnabled            = cacheSettings.QueryHashingEnabled;
            CacheEntryChangeMonitorPrefix  = cacheSettings.CacheEntryChangeMonitorPrefix;
            _cacheItemPolicyFactory        = cacheSettings.PolicyFactory;
            this.CacheDependencyCalculator = new CacheDependencyCalculator(cacheSettings.CacheEntryChangeMonitorPrefix);
        }
        internal virtual TEnhancedOrgService CreateEnhancedServiceInternal(bool isInitialiseCrmServices = true,
                                                                           int threads = 1)
        {
            var enhancedService = (TEnhancedOrgService)Activator.CreateInstance(typeof(TEnhancedOrgService), parameters);

            if (parameters.IsTransactionsEnabled)
            {
                enhancedService.TransactionManager = new TransactionManager();
            }

            if (parameters.IsCachingEnabled)
            {
                ObjectCache cache;

                switch (parameters.CachingParams.CacheMode)
                {
                case CacheMode.Global:
                case CacheMode.Private:
                    cache = factoryCache;
                    break;

                case CacheMode.PrivatePerInstance:
                    cache = new MemoryCache(parameters.ConnectionString);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(parameters.CachingParams.CacheMode));
                }

                var cacheSettings =
                    new OrganizationServiceCacheSettings
                {
                    PolicyFactory = new CacheItemPolicyFactory(parameters.CachingParams.Offset,
                                                               parameters.CachingParams.SlidingExpiration)
                };

                enhancedService.Cache       = new OrganizationServiceCache(cache, cacheSettings);
                enhancedService.ObjectCache = cache;
            }

            if (isInitialiseCrmServices)
            {
                enhancedService.FillServicesQueue(
                    Enumerable.Range(0, threads).Select(e => CreateCrmService()));
            }

            return(enhancedService);
        }
示例#4
0
        public virtual TEnhancedOrgService CreateEnhancedService()
        {
            var enhancedService = (TEnhancedOrgService)Activator.CreateInstance(typeof(TEnhancedOrgService), parameters);

            if (parameters.IsTransactionsEnabled)
            {
                enhancedService.TransactionManager = new TransactionManager();
            }

            if (parameters.IsCachingEnabled)
            {
                ObjectCache cache;

                switch (parameters.CachingParams.CacheMode)
                {
                case CacheMode.Global:
                case CacheMode.Private:
                    cache = factoryCache;
                    break;

                case CacheMode.PrivatePerInstance:
                    cache = new MemoryCache(parameters.ConnectionString);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(parameters.CachingParams.CacheMode));
                }

                var cacheSettings =
                    new OrganizationServiceCacheSettings
                {
                    PolicyFactory = new CacheItemPolicyFactory(parameters.CachingParams.Offset,
                                                               parameters.CachingParams.SlidingExpiration)
                };

                enhancedService.Cache       = new OrganizationServiceCache(cache, cacheSettings);
                enhancedService.ObjectCache = cache;
            }

            return(enhancedService);
        }
示例#5
0
        private IOrganizationServiceCache CreateDefaultServiceCache(string serviceCacheName = null, string connectionId = null, bool allowDefaultFallback = false)
        {
            var section = CrmConfigurationManager.GetCrmSection();

            var serviceCacheElement = section.ServiceCache.GetElementOrDefault(serviceCacheName, allowDefaultFallback);

            var objectCacheName = !string.IsNullOrWhiteSpace(serviceCacheElement.ObjectCacheName)
                                ? serviceCacheElement.ObjectCacheName
                                : serviceCacheElement.Name;
            var objectCacheElement = section.ObjectCache.GetElementOrDefault(objectCacheName, allowDefaultFallback);

            var settings = new OrganizationServiceCacheSettings(connectionId)
            {
                ConnectionId        = connectionId,
                CacheRegionName     = serviceCacheElement.CacheRegionName,
                QueryHashingEnabled = serviceCacheElement.QueryHashingEnabled,
                PolicyFactory       = objectCacheElement,
            };

            var objectCache  = CrmConfigurationManager.CreateObjectCache(objectCacheName, true);
            var serviceCache = CreateDefaultServiceCache(objectCache, settings);

            return(serviceCache);
        }
示例#6
0
 public CompositeOrganizationServiceCache(ObjectCache cache, OrganizationServiceCacheSettings settings)
     : this(new OrganizationServiceCache(cache, settings))
 {
 }
示例#7
0
 protected virtual IOrganizationServiceCache CreateDefaultServiceCache(ObjectCache objectCache, OrganizationServiceCacheSettings settings)
 {
     return(new OrganizationServiceCache(objectCache, settings));
 }
 public PortalBusOrganizationServiceCache(ObjectCache cache, OrganizationServiceCacheSettings settings)
     : base(cache, settings)
 {
 }
 public ContentMapOrganizationServiceCache(ObjectCache cache, OrganizationServiceCacheSettings settings)
     : base(cache, settings)
 {
 }
        /// <summary>
        /// Creates a <see cref="IOrganizationServiceCache"/> object.
        /// </summary>
        /// <param name="cache"></param>
        /// <param name="cacheItemPolicyFactory"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        public IOrganizationServiceCache CreateOrganizationServiceCache(ObjectCache cache = null, OrganizationServiceCacheSettings settings = null)
        {
            var obj = CreateDependency(
                () => new OrganizationServiceCache(cache, settings),
                cache, settings);

            if (obj is OrganizationServiceCache)
            {
                PreInitialize(obj as OrganizationServiceCache);
            }

            return(Initialize(obj));
        }