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); }
private void InitializeAspectSwitches(IReadOnlyDictionary <string, SwitchOperationStatus> aspectOperations) { foreach (var aspectOperation in aspectOperations) { var operation = SwitchFactory.InitializeSwitchOperationStatus(sequenceGenerator, aspectOperation.Value); aspectSwitchDictionary.Add(aspectOperation.Key, operation); } }
/// <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); }
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); }
/// <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); }