Пример #1
0
        private int SwitchMethodInternal(string methodSignature, SwitchOperation operation, int sequence)
        {
            if (methodSwitchDictionary.ContainsKey(methodSignature))
            {
                if (sequence == UseGeneratedSequence)
                {
                    methodSwitchDictionary[methodSignature].Switch(operation);
                }
                else
                {
                    methodSwitchDictionary[methodSignature].Switch(operation, sequence);
                }

                sequence = methodSwitchDictionary[methodSignature].Sequence;
            }
            else
            {
                var operationStatus = SwitchFactory.InitializeSwitchOperationStatus(sequenceGenerator, operation);
                sequence = operationStatus.Sequence;
                methodSwitchDictionary.Add(methodSignature, operationStatus);
            }

            SwitchAllExistingMethodAspect(methodSignature, operation, sequence);
            return(sequence);
        }
Пример #2
0
 private void InitializeAspectSwitches(IReadOnlyDictionary <string, SwitchOperationStatus> aspectOperations)
 {
     foreach (var aspectOperation in aspectOperations)
     {
         var operation = SwitchFactory.InitializeSwitchOperationStatus(sequenceGenerator, aspectOperation.Value);
         aspectSwitchDictionary.Add(aspectOperation.Key, operation);
     }
 }
Пример #3
0
        /// <inheritdoc/>
        public void Switch(SwitchOperation operation)
        {
            int sequence;

            if (Operation == null)
            {
                Operation = SwitchFactory.InitializeSwitchOperationStatus(sequenceGenerator, operation);
                sequence  = Operation.Sequence;
            }
            else
            {
                sequence = SwitchExistingClass(operation);
            }

            SwitchAll(operation, sequence);
        }
Пример #4
0
        private int Switch(string aspect, SwitchOperation operation)
        {
            if (string.IsNullOrWhiteSpace(aspect))
            {
                throw new ArgumentNullException("aspect");
            }

            var switched = 0;

            using (completedLock.ReadLock)
                using (operationLock.ReadLock)
                {
                    foreach (var completed in completed.Values)
                    {
                        if (completed.IsAspectApplied(aspect))
                        {
                            switched += completed.SwitchAspect(aspect, operation);
                        }
                    }

                    SwitchOperationStatus operationStatus;
                    if (aspectOperations.ContainsKey(aspect))
                    {
                        operationStatus = aspectOperations[aspect];
                        operationStatus.Switch(operation);
                    }
                    else
                    {
                        operationStatus = SwitchFactory.InitializeSwitchOperationStatus(sequenceGenerator, operation);
                        using (operationLock.WriteLock)
                        {
                            aspectOperations.Add(aspect, operationStatus);
                        }
                    }

                    foreach (var classOperation in classOperations.Values)
                    {
                        classOperation.SwitchAspect(aspect, operation);
                    }
                }

            return(switched);
        }
Пример #5
0
        /// <inheritdoc/>
        public void SwitchAspect(string aspect, SwitchOperation operation)
        {
#if DEBUG
            // the code will be called in client assembly, so reducing unnecessary validations for performance consideration
            if (string.IsNullOrEmpty(aspect))
            {
                throw new ArgumentNullException("aspect");
            }
#endif
            int sequence;
            if (aspectSwitchDictionary.ContainsKey(aspect))
            {
                sequence = SwitchExistingAspect(aspect, operation);
            }
            else
            {
                var operationStatus = SwitchFactory.InitializeSwitchOperationStatus(sequenceGenerator, operation);
                sequence = operationStatus.Sequence;
                aspectSwitchDictionary.Add(aspect, operationStatus);
            }

            SwitchAllAspect(aspect, operation, sequence);
        }