private static MethodInfo GetMethodInfo(Type type, string methodName, IEnumerable <object> parameters) { var parametersType = parameters.Select(p => p.GetType()).ToArray(); var parametersTypeName = parametersType.Select(p => p.Name).Join("/"); var key = new MemberKey(type, string.Concat(methodName, parametersTypeName)); lock (lockInstance) { if (!typeMethodInfoCache.ContainsKey(key)) { var methodInfo = type.GetMethod( methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new[] { typeof(string) }, null); if (methodInfo == null) { var message = $"Cannot find the method '{methodName}' into the type '{type}'."; throw new ArgumentException(message); } typeMethodInfoCache.Add(key, methodInfo); } } var method = typeMethodInfoCache[key]; return(method); }
private static MethodInfo GetMethodInfo(Type type, string methodName, IEnumerable<object> parameters) { var parametersType = parameters.Select(p => p.GetType()).ToArray(); var parametersTypeName = parametersType.Select(p => p.Name).Join("/"); var key = new MemberKey(type, string.Concat(methodName, parametersTypeName)); lock (lockInstance) { if (!typeMethodInfoCache.ContainsKey(key)) { var methodInfo = type.GetMethod( methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new[] { typeof(string) }, null); if (methodInfo == null) { var message = "Cannot find the method '{Method}' into the type '{Type}'.".NamedFormat(methodName, type.FullName); new ArgumentException(message).Throw(); } typeMethodInfoCache.Add(key, methodInfo); } } var method = typeMethodInfoCache[key]; return method; }
public static FieldInfo Field(this Type type, string propertyName) { var key = new MemberKey(type, propertyName); lock (lockInstance) { if (!typeFieldInfoCache.ContainsKey(key)) { var cachedField = GetFieldByPropertyName(type, propertyName); typeFieldInfoCache.Add(key, cachedField); } } var field = typeFieldInfoCache[key]; return field; }
public static FieldInfo Field(this Type type, string propertyName) { var key = new MemberKey(type, propertyName); lock (lockInstance) { if (!typeFieldInfoCache.ContainsKey(key)) { var cachedField = GetFieldByPropertyName(type, propertyName); typeFieldInfoCache.Add(key, cachedField); } } var field = typeFieldInfoCache[key]; return(field); }