Exemple #1
0
        public Type GetPropertyType(object entity, string propertyName, BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance)
        {
            Type propertyType;
            Type type = entity.GetType();
            var  key  = new HelperKey(type, propertyName, null);

            if (!PropertyTypeInfo.TryGetValue(key, out propertyType))
            {
                var pi = type.GetProperty(propertyName, bindingFlags);
                propertyType = pi.PropertyType;
            }
            return(propertyType);
        }
Exemple #2
0
        public T GetInstanceMethodHandler <T>(object entity, string methodName, BindingFlags bindingFlags,
                                              Type instanceType, int?parametersCount = null, Type[] typeParameters = null, bool callVirtIfNeeded = true)
        {
            object method;
            var    key = new HelperKey(instanceType, methodName, typeof(T), parametersCount, typeParameters,
                                       callVirtIfNeeded);

            if (!InvokeInfo.TryGetValue(key, out method))
            {
                method = CreateInstanceMethodHandler <T>(entity, methodName, bindingFlags, instanceType, parametersCount,
                                                         typeParameters, callVirtIfNeeded);
                InvokeInfo[key] = method;
            }
            return((T)method);
        }
Exemple #3
0
        public object GetPropertyValue(object entity, string propertyName, BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance)
        {
            object getter;
            var    type = entity.GetType();
            var    key  = new HelperKey(type, propertyName, typeof(Func <object, object>));

            if (!InvokeInfo.TryGetValue(key, out getter))
            {
                var pi = type.GetProperty(propertyName, bindingFlags);
                getter          = CreateGetter(pi);
                InvokeInfo[key] = getter;
            }
            var func = (Func <object, object>)getter;

            return(func(entity));
        }
Exemple #4
0
        public void SetPropertyValue(object entity, string propertyName, object value, BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance)
        {
            object setter;
            var    type = entity.GetType();
            var    key  = new HelperKey(type, propertyName, typeof(Action <object, object>));

            if (!InvokeInfo.TryGetValue(key, out setter))
            {
                var pi = type.GetProperty(propertyName, bindingFlags);
                setter          = CreateSetter(pi);
                InvokeInfo[key] = setter;
            }
            var del = (Action <object, object>)setter;

            del(entity, value);
        }
Exemple #5
0
 public bool Equals(HelperKey other)
 {
     return(type == other.type && string.Equals(handlerName, other.handlerName) && Equals(handlerType, other.handlerType) && castParameters.Equals(other.castParameters) && forcedResultType == other.forcedResultType && forcedThisArgType == other.forcedThisArgType && parametersCount == other.parametersCount);
 }