/// <summary>
        /// Handler executed before execution of the method to which the current custom attribute is applied.
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnEntry( MethodExecutionArgs eventArgs )
        {
            ReaderWriterLockSlim @lock = ((IReaderWriterSynchronized)eventArgs.Instance).Lock;

            if ( this.UseDeadlockDetection )
            {
                MethodInterceptionArgs args = new MethodInterceptionArgsImpl( @lock, Arguments.Empty ) { TypedBinding = WriterReadLockBinding.Instance };

                if ( [email protected] )
                {
                    eventArgs.MethodExecutionTag = new ExitReaderLockLockCookie();
                    DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnUpgradeableReadEnter( args );
                }
                DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnWriterLockEnter( args );
            }
            else
            {
                if ( [email protected] )
                {
                    eventArgs.MethodExecutionTag = new ExitReaderLockLockCookie();
                    @lock.EnterUpgradeableReadLock();
                }
                @lock.EnterWriteLock();
            }
        }
 public void Process()
 {
   MethodInterceptionArgsImpl interceptionArgsImpl = new MethodInterceptionArgsImpl((object) this, Arguments.Empty);
   interceptionArgsImpl.Method = InjectedAspectTests.FakeService.\u003C\u003Ez__Aspects.m1;
   interceptionArgsImpl.TypedBinding = (MethodBinding) InjectedAspectTests.FakeService.\u003CProcess\u003Ec__Binding.singleton;
   InjectedAspectTests.FakeService.\u003C\u003Ez__Aspects.a0.OnInvoke((MethodInterceptionArgs) interceptionArgsImpl);
 }
        /// <summary>
        /// Handler executed before execution of the method to which the current custom attribute is applied.
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnEntry(MethodExecutionArgs eventArgs)
        {
            // Recursion support added. When UpgradeableRead or Write method called from Read method exception is thrown.

            ReaderWriterLockSlim @lock = ((IReaderWriterSynchronized)eventArgs.Instance).Lock;

            if (@lock.IsWriteLockHeld)
            {
                return;
            }

            if (this.UseDeadlockDetection)
            {
                MethodInterceptionArgs args = new MethodInterceptionArgsImpl(@lock, Arguments.Empty)
                {
                    TypedBinding = EnterReadLockBinding.Instance
                };

                DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnReaderLockEnter(args);
            }
            else
            {
                @lock.EnterReadLock();
            }
        }
        /// <summary>
        /// Handler executed before execution of the method to which the current custom attribute is applied.
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnEntry(MethodExecutionArgs eventArgs)
        {
            ReaderWriterLockSlim @lock = ((IReaderWriterSynchronized)eventArgs.Instance).Lock;

            if (this.UseDeadlockDetection)
            {
                MethodInterceptionArgs args = new MethodInterceptionArgsImpl(@lock, Arguments.Empty)
                {
                    TypedBinding = WriterReadLockBinding.Instance
                };

                if ([email protected])
                {
                    eventArgs.MethodExecutionTag = new ExitReaderLockLockCookie();
                    DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnUpgradeableReadEnter(args);
                }
                DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnWriterLockEnter(args);
            }
            else
            {
                if ([email protected])
                {
                    eventArgs.MethodExecutionTag = new ExitReaderLockLockCookie();
                    @lock.EnterUpgradeableReadLock();
                }
                @lock.EnterWriteLock();
            }
        }
        private void Exit(bool reEnterWriteLock, ReaderWriterLockSlim @lock)
        {
            if (reEnterWriteLock)
            {
                if (this.UseDeadlockDetection)
                {
                    MethodInterceptionArgs args = new MethodInterceptionArgsImpl(@lock, Arguments.Empty)
                    {
                        TypedBinding = WriterReadLockBinding.Instance
                    };

                    DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnWriterLockEnter(args);
                }
                else
                {
                    @lock.EnterWriteLock();
                }
            }
            else
            {
                if (this.UseDeadlockDetection)
                {
                    MethodExecutionArgs args = new MethodExecutionArgs(@lock, Arguments.Empty);

                    DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnReaderLockExit(args);
                }

                @lock.ExitReadLock();
            }
        }
        /// <summary>
        /// Handler executed before execution of the method to which the current custom attribute is applied.
        /// </summary>
        /// <param name="eventArgs"></param>
        public override void OnEntry( MethodExecutionArgs eventArgs )
        {
            // Recursion support added. When UpgradeableRead or Write method called from Read method exception is thrown.

            ReaderWriterLockSlim @lock = ((IReaderWriterSynchronized)eventArgs.Instance).Lock;
            if ( @lock.IsWriteLockHeld )
            {
                return;
            }

            if ( this.UseDeadlockDetection )
            {
                MethodInterceptionArgs args = new MethodInterceptionArgsImpl( @lock, Arguments.Empty ) { TypedBinding = EnterReadLockBinding.Instance };

                DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnReaderLockEnter( args );
            }
            else
            {
                @lock.EnterReadLock();
            }
        }
        private void Exit( bool reEnterWriteLock, ReaderWriterLockSlim @lock )
        {
            if ( reEnterWriteLock )
            {
                if ( this.UseDeadlockDetection )
                {
                    MethodInterceptionArgs args = new MethodInterceptionArgsImpl( @lock, Arguments.Empty ) { TypedBinding = WriterReadLockBinding.Instance };

                    DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnWriterLockEnter( args );
                }
                else
                {
                    @lock.EnterWriteLock();
                }
            }
            else
            {
                if ( this.UseDeadlockDetection )
                {
                    MethodExecutionArgs args = new MethodExecutionArgs( @lock, Arguments.Empty );

                    DeadlockDetectionPolicy.ReaderWriterEnhancements.Instance.OnReaderLockExit( args );
                }

                @lock.ExitReadLock();
            }
        }