Example #1
0
        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);
        }
Example #2
0
        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);
        }
        internal static IMemberDefinition GetMember(string assemblyFilePath, uint moduleToken, uint typeToken, uint memberToken, SupportedLanguage language)
        {
            MembersCacheKey key = new MembersCacheKey()
            {
                AssemblyFilePath = assemblyFilePath, ModuleToken = moduleToken, TypeToken = typeToken, MemberToken = memberToken
            };

            IMemberDefinition result;

            if (!MembersCache.TryGetValue(key, out result))
            {
                TypeDefinition type = GetTypeDefinition(assemblyFilePath, moduleToken, typeToken);
                IEnumerable <IMemberDefinition> typeMembers = type.GetMembersSorted(true, GetLanguage(language));
                result = typeMembers.Where(x => x.MetadataToken.ToUInt32() == memberToken).FirstOrDefault();
                MembersCache.Add(key, result);
            }

            return(result);
        }