コード例 #1
0
ファイル: CacheAspect.cs プロジェクト: MajidSafari/bltoolkit
	public override int CachedMethod(int p1, int p2)
	{
		int returnValue = 0;

		if (_methodInfo == null)
		{
			_methodInfo = new CallMethodInfo((MethodInfo)MethodBase.GetCurrentMethod());
		}

		InterceptCallInfo info = new InterceptCallInfo();

		info.Object             = this;
		info.CallMethodInfo     = _methodInfo;
		info.ParameterValues[0] = p1;
		info.ParameterValues[1] = p2;
		info.ReturnValue        = returnValue;
		info.InterceptResult    = InterceptResult.Continue;
		info.InterceptType      = InterceptType.BeforeCall;

		if (_interceptor == null)
		{
			_interceptor = new CacheAspect();
			_interceptor.Init(_methodInfo, "MaxCacheTime=500;IsWeak=False");
		}

		// 'BeforeCall' step checks if the method is cached.
		// If it is and the cache is not expired, the Intercept method populates 
		// return value and output parameters with the cached values and 
		// sets info.InterceptResult to InterceptResult.Return.
		// See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.BeforeCall[/link] method for details.
		//
		_interceptor.Intercept(info);

		returnValue = (int)info.ReturnValue;

		if (info.InterceptResult != InterceptResult.Return)
		{
			// If the method call is not cached, target method is called.
			//
			returnValue = base.CachedMethod(p1, p2);

			info.ReturnValue     = returnValue;
			info.InterceptResult = InterceptResult.Continue;
			info.InterceptType   = InterceptType.AfterCall;

			// 'AfterCall' step stores parameters and return values in the cache.
			// See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.AfterCall[/link] method for details.
			//
			_interceptor.Intercept(info);

			returnValue = (int)info.ReturnValue;
		}

		return returnValue;
	}
コード例 #2
0
ファイル: CacheAspect.cs プロジェクト: x64/bltoolkit
    public override int CachedMethod(int p1, int p2)
    {
        int returnValue = 0;

        if (_methodInfo == null)
        {
            _methodInfo = new CallMethodInfo((MethodInfo)MethodBase.GetCurrentMethod());
        }

        InterceptCallInfo info = new InterceptCallInfo();

        info.Object             = this;
        info.CallMethodInfo     = _methodInfo;
        info.ParameterValues[0] = p1;
        info.ParameterValues[1] = p2;
        info.ReturnValue        = returnValue;
        info.InterceptResult    = InterceptResult.Continue;
        info.InterceptType      = InterceptType.BeforeCall;

        if (_interceptor == null)
        {
            _interceptor = new CacheAspect();
            _interceptor.Init(_methodInfo, "MaxCacheTime=500;IsWeak=False");
        }

        // 'BeforeCall' step checks if the method is cached.
        // If it is and the cache is not expired, the Intercept method populates
        // return value and output parameters with the cached values and
        // sets info.InterceptResult to InterceptResult.Return.
        // See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.BeforeCall[/link] method for details.
        //
        _interceptor.Intercept(info);

        returnValue = (int)info.ReturnValue;

        if (info.InterceptResult != InterceptResult.Return)
        {
            // If the method call is not cached, target method is called.
            //
            returnValue = base.CachedMethod(p1, p2);

            info.ReturnValue     = returnValue;
            info.InterceptResult = InterceptResult.Continue;
            info.InterceptType   = InterceptType.AfterCall;

            // 'AfterCall' step stores parameters and return values in the cache.
            // See the [link][file]Aspects/CacheAspect.cs[/file]CacheAspect.AfterCall[/link] method for details.
            //
            _interceptor.Intercept(info);

            returnValue = (int)info.ReturnValue;
        }

        return(returnValue);
    }
コード例 #3
0
	public override void TestMethod()
	{
		if (_methodInfo == null)
		{
			_methodInfo = new CallMethodInfo((MethodInfo)MethodBase.GetCurrentMethod());
		}

		InterceptCallInfo info = new InterceptCallInfo();

		try
		{
			info.Object          = this;
			info.CallMethodInfo  = _methodInfo;
			info.InterceptResult = InterceptResult.Continue;
			info.InterceptType   = InterceptType.BeforeCall;

			if (_interceptor == null)
			{
				_interceptor = new CounterAspect();
				_interceptor.Init(_methodInfo, null);
			}

			// 'BeforeCall' creates or gets a counter for the method and 
			// registers the current call.
			// See the [link][file]Aspects/CounterAspect.cs[/file]CounterAspect.BeforeCall[/link] method for details.
			//
			_interceptor.Intercept(info);

			if (info.InterceptResult != InterceptResult.Return)
			{
				// Target method call.
				//
				base.TestMethod();
			}
		}
		catch (Exception exception)
		{
			info.Exception       = exception;
			info.InterceptResult = InterceptResult.Continue;
			info.InterceptType   = InterceptType.OnCatch;

			// 'OnCatch' is required to count calls with exceptions.
			//
			_interceptor.Intercept(info);

			if (info.InterceptResult != InterceptResult.Return)
			{
				throw;
			}
		}
		finally
		{
			info.InterceptResult = InterceptResult.Continue;
			info.InterceptType   = InterceptType.OnFinally;

			// 'OnFinally' step adds statistic to the method counter.
			// See the [link][file]Aspects/CounterAspect.cs[/file]CounterAspect.OnFinally[/link] method for details.
			//
			_interceptor.Intercept(info);
		}
	}
コード例 #4
0
ファイル: CounterAspect.cs プロジェクト: x64/bltoolkit
    public override void TestMethod()
    {
        if (_methodInfo == null)
        {
            _methodInfo = new CallMethodInfo((MethodInfo)MethodBase.GetCurrentMethod());
        }

        InterceptCallInfo info = new InterceptCallInfo();

        try
        {
            info.Object          = this;
            info.CallMethodInfo  = _methodInfo;
            info.InterceptResult = InterceptResult.Continue;
            info.InterceptType   = InterceptType.BeforeCall;

            if (_interceptor == null)
            {
                _interceptor = new CounterAspect();
                _interceptor.Init(_methodInfo, null);
            }

            // 'BeforeCall' creates or gets a counter for the method and
            // registers the current call.
            // See the [link][file]Aspects/CounterAspect.cs[/file]CounterAspect.BeforeCall[/link] method for details.
            //
            _interceptor.Intercept(info);

            if (info.InterceptResult != InterceptResult.Return)
            {
                // Target method call.
                //
                base.TestMethod();
            }
        }
        catch (Exception exception)
        {
            info.Exception       = exception;
            info.InterceptResult = InterceptResult.Continue;
            info.InterceptType   = InterceptType.OnCatch;

            // 'OnCatch' is required to count calls with exceptions.
            //
            _interceptor.Intercept(info);

            if (info.InterceptResult != InterceptResult.Return)
            {
                throw;
            }
        }
        finally
        {
            info.InterceptResult = InterceptResult.Continue;
            info.InterceptType   = InterceptType.OnFinally;

            // 'OnFinally' step adds statistic to the method counter.
            // See the [link][file]Aspects/CounterAspect.cs[/file]CounterAspect.OnFinally[/link] method for details.
            //
            _interceptor.Intercept(info);
        }
    }