Beispiel #1
0
        public void AddUnactualResource(UnactualResourceContent resource, ICachierStorage <Guid> resourceStorage)
        {
            if (Transaction.Current == null)
            {
                SendUpdate(resource);
            }
            else
            {
                bool newTransaction            = false;
                var  transactedResourceStorage =
                    _transactionUpdates.GetOrAdd(Transaction.Current.TransactionInformation.DistributedIdentifier,
                                                 id =>
                {
                    newTransaction = true;
                    Transaction.Current.TransactionCompleted += Current_TransactionCompleted;
                    return(new TransactedUpdatesStorage(_subscriptor, Transaction.Current.IsolationLevel));
                });
                if (newTransaction)
                {
                    Transaction.Current.EnlistVolatile(transactedResourceStorage, EnlistmentOptions.None);
                }

                transactedResourceStorage.AddResource(resource, resourceStorage);
            }
        }
Beispiel #2
0
        internal void Initialize(bool isCacheData, bool keepItems)
        {
            Debug.Assert(_getter.StatChannel != null);
            Debug.Assert(_services._statisticsCollector != null);
            _dataCache = isCacheData
                             ? GetStorageForCacheData(_services._statisticsCollector, keepItems)
                             : GetStorageForResource(_services._statisticsCollector, keepItems);

            _accumulator = _getter.ReturnAccumulator(_dataCache, GetResource);
            IsTracking   = _services._settingsHolder.Settings.AutoSubscription;
            _getter.StatChannel.Register(Name);
        }
Beispiel #3
0
        internal void SetDataCache(string typeName)
        {
            Debug.Assert(_channel != null, "Не установлены импорты - зарегистрируйте CompositionContainer для экспорта MEF или используйте собственный контейнер");
#if DEBUG
            if (_channel == null)
            {
                Debugger.Break();
            }
#endif
            _tokenProvider = new CurrentCachierStorage(_channel, _statisticsCollector);
            _channel.Register(typeName);
            _resName = typeName;
        }
Beispiel #4
0
 internal abstract Accumulator <Guid, SecurityToken> ReturnAccumulator(ICachierStorage <string> storage, ISecurityContext context);
Beispiel #5
0
 internal abstract IAccumulator <Guid, object> ReturnAccumulator(ICachierStorage <Guid> storage, Func <Guid, object> getResource);