Exemplo n.º 1
0
        public void AddAopHandler(MethodBase methodBase, IList methodHandlers)
        {
            if (validatorType == ParameterValidatorType.UsageAttribute)
            {
                AddAopHandlerByUsageAttribute(methodBase, methodHandlers);
            }
            else
            {
                if (cachedHandlers == null)
                {
                    cachedHandlers = new Dictionary <MethodBase, ParameterValidatorHandler>();
                }

                ParameterValidatorHandler handler;

                if (!cachedHandlers.TryGetValue(methodBase, out handler))
                {
                    string paramName = this.parameterName;
                    paramName = paramName.ToLower();
                    int           paramIndex = -1;
                    ParameterInfo paramInfo  = null;
                    var           ps         = methodBase.GetParameters();
                    for (int i = 0, len = ps.Length; i < len; i++)
                    {
                        var p = ps[i];
                        if (p.Name.ToLower() == paramName)
                        {
                            paramInfo  = p;
                            paramIndex = i;
                            break;
                        }
                    }
                    if (paramInfo == null)
                    {
                        throw new AopMethodParameterNotFoundException(methodBase.DeclaringType, methodBase.Name, paramName);
                    }

                    var validator = CreateValidator(validatorType, paramInfo.ParameterType, validatorParameters);
                    handler = new ParameterValidatorHandler(paramIndex, validator);

                    cachedHandlers[methodBase] = handler;
                }

                if (handler != null)
                {
                    methodHandlers.Add(handler);
                }
            }
        }
Exemplo n.º 2
0
        private void AddAopHandlerByUsageAttribute(MethodBase methodBase, IList methodHandlers)
        {
            ParameterValidatorHandler handler;

            if (cachedStaticHandlers == null)
            {
                cachedStaticHandlers = new Dictionary <MethodBase, ParameterValidatorHandler>();
            }

            if (!cachedStaticHandlers.TryGetValue(methodBase, out handler))
            {
                List <int> paramIndexs = null;
                List <IParameterValidator> validators = null;

                var ps = methodBase.GetParameters();

                for (int i = 0, len = ps.Length; i < len; i++)
                {
                    var p = ps[i];

                    foreach (var attr in p.GetCustomAttributes <ParameterValidatorAttribute>(true))
                    {
                        if (paramIndexs == null)
                        {
                            paramIndexs = new List <int>();
                            validators  = new List <IParameterValidator>();
                        }
                        paramIndexs.Add(i);
                        IParameterValidator validator = attr.CreateValidator(p);
                        if (validator != null)
                        {
                            validators.Add(validator);
                        }
                    }
                }
                if (paramIndexs != null)
                {
                    handler = new ParameterValidatorHandler(paramIndexs.ToArray(), validators.ToArray());
                }
                cachedStaticHandlers[methodBase] = handler;
            }

            if (handler != null)
            {
                methodHandlers.Add(handler);
            }
        }