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); }
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); }
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)); }
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); }
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); }