Business Logic Toolkit for .NET
www.bltoolkit.net
|  Home   |  Download   |  Documentation   |  Discussions   |  License   |

  Source.Aspects.InterceptorAttribute.cs

 
using System;

using BLToolkit.TypeBuilder.Builders;

namespace BLToolkit.Aspects
{
    [AttributeUsage(
        AttributeTargets.Class |
        AttributeTargets.Interface |
        AttributeTargets.Property |
        AttributeTargets.Method,
        AllowMultiple=true)]
    public class InterceptorAttribute : AbstractTypeBuilderAttribute
    {
        public InterceptorAttribute(Type interceptorType, InterceptType interceptType)
            : this(interceptorType, interceptType, null, TypeBuilderConsts.Priority.Normal)
        {
        }

        public InterceptorAttribute(Type interceptorType, InterceptType interceptType, int priority)
            : this(interceptorType, interceptType, null, priority)
        {
        }

        public InterceptorAttribute(Type interceptorType, InterceptType interceptType, string parameters)
            : this(interceptorType, interceptType, parameters, TypeBuilderConsts.Priority.Normal)
        {
        }

        public InterceptorAttribute(
            Type interceptorType, InterceptType interceptType, string configString, int priority)
            : this(interceptorType, interceptType, configString, priority, false)
        {
        }

        public InterceptorAttribute(
            Type interceptorType, InterceptType interceptType, string configString, int priority, bool localInterceptor)
        {
            if (interceptorType == null && interceptType != 0)
                throw new ArgumentNullException("interceptorType");

            _interceptorType  = interceptorType;
            _interceptType    = interceptType;
            _configString     = configString;
            _priority         = priority;
            _localInterceptor = localInterceptor;
        }

        private readonly Type _interceptorType;
        public  virtual  Type  InterceptorType
        {
            get { return _interceptorType; }
        }

        private readonly InterceptType _interceptType;
        public  virtual  InterceptType  InterceptType
        {
            get { return _interceptType; }
        }

        private readonly int _priority;
        public  virtual  int  Priority
        {
            get { return _priority; }
        }

        private readonly string _configString;
        public  virtual  string  ConfigString
        {
            get { return _configString; }
        }

        private readonly bool _localInterceptor;
        public  virtual  bool  LocalInterceptor
        {
            get { return _localInterceptor; }
        }

        public override IAbstractTypeBuilder TypeBuilder
        {
            get
            {
                 return new Builders.InterceptorAspectBuilder(
                     InterceptorType, InterceptType, ConfigString, Priority, LocalInterceptor);
            }
        }
    }
}
 
© 2010 www.bltoolkit.net
support@bltoolkit.net