Exemplo n.º 1
0
        public TType Create()
        {
            Type invocationType = typeof(TType);
            List <IInterceptor> interceptors = new List <IInterceptor>();
            bool hasClassLevelAttribute      = false;

            // if we have a class level attribute
            foreach (var attribute in invocationType.GetCustomAttributes(false))
            {
                // we have to handle all methods
                if (attribute.GetType() == typeof(FeatureClassAttribute))
                {
                    hasClassLevelAttribute = true;
                    MethodInfo[] methodInfos = invocationType.GetMethods();
                    foreach (MethodInfo methodInfo in methodInfos)
                    {
                        FeatureMethodAttribute featureMethodAttribute = new FeatureMethodAttribute((attribute as FeatureClassAttribute).FeatureType);
                        BaseInterceptor        interceptor            = BaseInterceptorFactory.Create(featureMethodAttribute as Attribute);
                        if (interceptor != null)
                        {
                            interceptors.Add(interceptor);
                        }
                    }
                }
            }
            // if this is defined at the class level we will ignore any other overrides
            if (!hasClassLevelAttribute)
            {
                // get the custom attributes at the method level
                MethodInfo[] methodInfos = invocationType.GetMethods();
                foreach (MethodInfo methodInfo in methodInfos)
                {
                    // if we have TimeAllMethods add interceptor for every method on the class
                    foreach (var methodAttribute in methodInfo.GetCustomAttributes(false))
                    {
                        BaseInterceptor interceptor = BaseInterceptorFactory.Create(methodAttribute as Attribute);
                        if (interceptor != null)
                        {
                            interceptors.Add(interceptor);
                        }
                    }
                }
            }
            return(new ProxyGenerator().CreateClassProxy(typeof(TType),
                                                         interceptors.ToArray()) as TType);
        }
Exemplo n.º 2
0
        public static BaseInterceptor Create <T>(Attribute attribute)
        {
            FeatureMethodAttribute featureMethodAttribute = (FeatureMethodAttribute)attribute;

            return(new FeatureMethodInterceptor(featureMethodAttribute.FeatureType));
        }