private static DynamicMethodHandle GetCachedMethod(MethodInfo info) { var key = new MethodCacheKey(info); DynamicMethodHandle mh = null; if (!_methodCache.TryGetValue(key, out mh)) { lock (_methodCache) { if (!_methodCache.TryGetValue(key, out mh)) { mh = new DynamicMethodHandle(info); _methodCache.Add(key, mh); } } } return(mh); }
private static DynamicMethodHandle GetCachedMethod(Type objType, string method, params Type[] parameters) { var key = new MethodCacheKey(objType, method, parameters); DynamicMethodHandle mh = null; if (!_methodCache.TryGetValue(key, out mh)) { MethodInfo info = GetMethod(objType, method, parameters); if (info != null) { lock (_methodCache) { if (!_methodCache.TryGetValue(key, out mh)) { mh = new DynamicMethodHandle(info); _methodCache.Add(key, mh); } } } } return(mh); }
internal static DynamicMemberHandle GetCachedProperty(Type objectType, string propertyName) { var key = new MethodCacheKey(objectType, propertyName, new Type[] { typeof(object) }); DynamicMemberHandle mh = null; if (!_memberCache.TryGetValue(key, out mh)) { lock (_memberCache) { if (!_memberCache.TryGetValue(key, out mh)) { PropertyInfo info = objectType.GetProperty(propertyName, propertyFlags); if (info == null) { throw new InvalidOperationException( string.Format("Member not found on object ({0})", propertyName)); } mh = new DynamicMemberHandle(info); _memberCache.Add(key, mh); } } } return(mh); }
internal static DynamicMemberHandle GetCachedField(Type objectType, string fieldName) { var key = new MethodCacheKey(objectType, fieldName, new Type[] { typeof(object) }); DynamicMemberHandle mh = null; if (!_memberCache.TryGetValue(key, out mh)) { lock (_memberCache) { if (!_memberCache.TryGetValue(key, out mh)) { FieldInfo info = objectType.GetField(fieldName, fieldFlags); if (info == null) { throw new InvalidOperationException( string.Format("Resources.MemberNotFoundException:{0}", fieldName)); } mh = new DynamicMemberHandle(info); _memberCache.Add(key, mh); } } } return(mh); }