Spring.Core.MethodArgumentsCriteria.IsSatisfied C# (CSharp) Méthode

IsSatisfied() public méthode

Does the supplied datum satisfy the criteria encapsulated by this instance?

This implementation respects the inheritance chain of any parameter System.Types... i.e. methods that have a base type (or interface) that is assignable to the System.Type in the same corresponding index of the parameter types will satisfy this criteria instance.

public IsSatisfied ( object datum ) : bool
datum object The datum to be checked by this criteria instance.
Résultat bool
        public bool IsSatisfied(object datum)
        {
            bool satisfied = false;
            MethodInfo method = datum as MethodInfo;
            if (method != null)
            {
                bool isParamArray = false;
                Type paramArrayType = null;
                ParameterInfo[] parametersBeingChecked = method.GetParameters();
                if (parametersBeingChecked.Length > 0)
                {
                    ParameterInfo lastParameter = parametersBeingChecked[parametersBeingChecked.Length - 1];
                    isParamArray = lastParameter.GetCustomAttributes(typeof(ParamArrayAttribute), false).Length > 0;
                    if (isParamArray)
                    {
                        paramArrayType = lastParameter.ParameterType.GetElementType();
                    }
                }
                if (parametersBeingChecked != null
                    && parametersBeingChecked.Length == _parameters.Length)
                {
                    satisfied = true;
                    for (int i = 0; i < _parameters.Length; ++i)
                    {
                        Type sourceType = _parameters[i];
                        Type typeBeingChecked = parametersBeingChecked[i].ParameterType;
                        if (!typeBeingChecked.IsAssignableFrom(sourceType))
                        {
                            if (isParamArray && i == _parameters.Length - 1)
                            {
                                if (!paramArrayType.IsAssignableFrom(sourceType))
                                {
                                    satisfied = false;
                                    break;
                                }
                            }
                            else
                            {
                                satisfied = false;
                                break;
                            }
                        }
                    }
                }
                else if (isParamArray && (_parameters.Length >= parametersBeingChecked.Length - 1))
                {
                    satisfied = true;
                    for (int i = 0; i < parametersBeingChecked.Length - 1; ++i)
                    {
                        Type sourceType = _parameters[i];
                        Type typeBeingChecked = parametersBeingChecked[i].ParameterType;
                        if (!typeBeingChecked.IsAssignableFrom(sourceType))
                        {
                            satisfied = false;
                            break;
                        }
                    }
                    for (int i = parametersBeingChecked.Length - 1; i < _parameters.Length; ++i)
                    {
                        Type sourceType = _parameters[i];
                        if (!paramArrayType.IsAssignableFrom(sourceType))
                        {
                            satisfied = false;
                            break;
                        }
                    }
                }
            }
            return satisfied;
        }

Usage Example

        public void IsSatisfied() 
        {
            MethodArgumentsCriteria criteria = new MethodArgumentsCriteria(
                new Object[] { "Bruno", DateTime.Now, new TestObject("Bruno", 29) });
            MethodInfo method = GetType ().GetMethod ("BoJangles");
            Assert.IsTrue (criteria.IsSatisfied (method), "Was not satisified with a method that takes a whole buncha parameters.");

            method = GetType().GetMethod ("BadBobbyBoJangles");
            Assert.IsFalse (criteria.IsSatisfied (method), "Was satisified with a (bad) method that takes a whole buncha parameters.");
        }
All Usage Examples Of Spring.Core.MethodArgumentsCriteria::IsSatisfied