static ICommand CreateCommand(object instance, string methodName, string[] methodArguments, Dictionary <string, object> contextParameters) { return(CommandConstructor( () => MethodReflection.Invoke(instance, methodName, methodArguments, contextParameters), () => MethodReflection.CanInvoke(instance, methodName, methodArguments, contextParameters) )); }
public void Test004Name() { var method = new MethodReflection(); var result = method.NameOf(() => GetStringNoOptimization() == GetStringNoOptimization()); Assert.AreEqual("op_Equality", result); }
public void Test004() { var method = new MethodReflection(); var result = method.From(() => GetStringNoOptimization() == GetStringNoOptimization()); Assert.AreEqual(typeof(string).GetMethod("op_Equality", new Type[] { typeof(string), typeof(string) }), result); }
public void Test003Name() { var method = new MethodReflection(); var result = method.NameOf(() => default(string).IndexOf(default(char), default(int))); Assert.AreEqual("IndexOf", result); }
public void Test003() { var method = new MethodReflection(); var result = method.From(() => default(string).IndexOf(default(char), default(int))); Assert.AreEqual(typeof(string).GetMethod("IndexOf", new Type[] { typeof(char) , typeof(int) }), result); }
public void Test001Name() { var method = new MethodReflection(); var result = method.NameOf(() => default(string).TrimEnd()); Assert.AreEqual("TrimEnd", result); }
public void Test001() { var method = new MethodReflection(); var result = method.From(() => default(string).TrimEnd()); Assert.AreEqual(typeof(string).GetMethod("TrimEnd"), result); }
private DecisionTreeLoader() { MethodReflection = Singleton.Instance <MethodReflection>(); ThreadHelper = Singleton.Instance <MultiThreadHelper>(); EvaluatorType = typeof(Func <bool>); ActionType = typeof(UnityAction); }
/// <summary> /// 属性 /// </summary> /// <param name="property">属性</param> /// <exception cref="ArgumentException"></exception> private Property(PropertyInfo property) { if (property == null) { throw new ArgumentNullException(); } this.Source = property; this.Name = property.Name; this.ValidRules = this.GetValidRules(property); this.getter = MethodReflection.CreateInvoker(property.GetGetMethod()); }
/// <summary> /// 属性 /// </summary> /// <param name="property">属性</param> /// <exception cref="ArgumentException"></exception> public Property(PropertyInfo property) { if (property == null) { throw new ArgumentNullException(); } this.Name = property.Name; this.Source = property; this.ValidRules = GetValidRules(property); if (property.CanRead == true) { this.getter = MethodReflection.CreateInvoker(property.GetGetMethod()); } if (property.CanWrite == true) { this.setter = MethodReflection.CreateInvoker(property.GetSetMethod()); } }
/// <summary> /// 属性的Setter /// </summary> /// <param name="property">属性</param> public PropertySetter(PropertyInfo property) { this.methodInvoker = MethodReflection.CreateInvoker(property.GetSetMethod()); this.Name = property.Name; this.Type = property.PropertyType; }
public override object ProvideValue(IServiceProvider serviceProvider) { var targetPropertyType = GetPropertyType(serviceProvider); if (targetPropertyType == typeof(ICommand)) { var instance = GetPropertyInstance(serviceProvider); return(MatchMethodSignature(Path, (methodName, methodArguments) => CreateCommand(instance, methodName, methodArguments, contextParameters: null))); } else if (targetPropertyType.Name == "RuntimeMethodInfo") { var instance = GetPropertyInstance(serviceProvider); var propertyMemberInfo = GetPropertyMemberInfo(serviceProvider); var eventName = Regex.Match(propertyMemberInfo.Name, "Add(.*)Handler").Groups[1].Value; Type eventHandlerType; var @event = instance.GetType().GetEvent(eventName); if (@event != null) { eventHandlerType = @event.EventHandlerType; } else { var routedEvent = EventManager.GetRoutedEventsForOwner(propertyMemberInfo.DeclaringType).Single(e => e.Name == eventName); eventHandlerType = routedEvent.HandlerType; } return(MatchMethodSignature(Path, (methodName, methodArguments) => CreateEventHandler(eventHandlerType, (contextParameters) => MethodReflection.Invoke(instance, methodName, methodArguments, contextParameters)))); } else if (targetPropertyType.Name == "RuntimeEventInfo") { var instance = GetPropertyInstance(serviceProvider); var eventName = GetPropertyMemberInfo(serviceProvider).Name; var @event = instance.GetType().GetEvent(eventName); return(MatchMethodSignature(Path, (methodName, methodArguments) => CreateEventHandler(@event.EventHandlerType, (contextParameters) => MethodReflection.Invoke(instance, methodName, methodArguments, contextParameters)))); } else if (targetPropertyType.Name == "RuntimePropertyInfo") { var instance = GetPropertyInstance(serviceProvider); var propertyMemberInfo = GetPropertyMemberInfo(serviceProvider); var propertyType = propertyMemberInfo.GetType().GetProperty("PropertyType")?.GetValue(propertyMemberInfo) as Type; if (propertyType == null) { return(null); } else if (typeof(ICommand).IsAssignableFrom(propertyType)) { return(MatchMethodSignature(Path, (methodName, methodArguments) => CreateCommand(instance, methodName, methodArguments, contextParameters: null))); } else if (typeof(Func <DependencyObject, object>).IsAssignableFrom(propertyType)) { var commandType = propertyType.GenericTypeArguments[1]; if (typeof(ICommand).IsAssignableFrom(commandType)) { return(ConvertFactory(returnType: commandType, factory: remoteInstance => MatchMethodSignature(Path, (methodName, methodArguments) => CreateCommand(remoteInstance, methodName, methodArguments, contextParameters: null)))); } else { return(ConvertFactory(returnType: commandType, factory: remoteInstance => MatchMethodSignature(Path, (methodName, methodArguments) => CreateEventHandler(commandType, (contextParameters) => MethodReflection.Invoke(remoteInstance, methodName, methodArguments, contextParameters))))); } } else { return(MatchMethodSignature(Path, (methodName, methodArguments) => CreateEventHandler(propertyType, (contextParameters) => MethodReflection.Invoke(instance, methodName, methodArguments, contextParameters)))); } } else { throw new NotSupportedException($"\"{Path}\" not supported as {nameof(CommandBinding)}."); } }
public void Test005Name() { var method = new MethodReflection(); var result = method.NameOf(() => (decimal)GetIntNoOptimization()); Assert.AreEqual("op_Implicit", result); }
public void Test005() { var method = new MethodReflection(); var result = method.From(() => (decimal)GetIntNoOptimization()); Assert.AreEqual(typeof(decimal).GetMethod("op_Implicit", new Type[] { typeof(int) }), result); }