CreateGet() public static method

public static CreateGet ( FieldInfo field ) : object>.Func
field System.Reflection.FieldInfo
return object>.Func
        void Write(XElement elem, Type t, object obj)
        {
            if (obj == null)
            {
                // For null entries in a nullable array
                // See https://github.com/Particular/NServiceBus/issues/2706
                if (t.IsNullableType())
                {
                    elem.Value = "null";
                }

                return;
            }

            if (!cache.typeMembers.TryGetValue(t, out var members))
            {
                cache.InitType(t);
                members = cache.typeMembers[t];
            }

            foreach (var prop in members.Item2)
            {
                if (IsIndexedProperty(prop))
                {
                    throw new NotSupportedException($"Type {t.FullName} contains an indexed property named {prop.Name}. Indexed properties are not supported on message types.");
                }
                WriteEntry(elem, prop.Name, prop.PropertyType, DelegateFactory.CreateGet(prop).Invoke(obj));
            }

            foreach (var field in members.Item1)
            {
                WriteEntry(elem, field.Name, field.FieldType, DelegateFactory.CreateGet(field).Invoke(obj));
            }
        }
        public static object GetValue(this MemberInfo member, object source)
        {
            var fieldInfo = member as FieldInfo;

            if (fieldInfo != null)
            {
                var field = DelegateFactory.CreateGet(fieldInfo);
                return(field.Invoke(source));
            }

            var propertyInfo = (PropertyInfo)member;

            if (!propertyInfo.CanRead)
            {
                if (propertyInfo.PropertyType.IsValueType)
                {
                    return(Activator.CreateInstance(propertyInfo.PropertyType));
                }

                return(null);
            }

            var property = DelegateFactory.CreateGet(propertyInfo);

            return(property.Invoke(source));
        }
Example #3
0
 internal List <DataBusPropertyInfo> GetDataBusProperties(object message)
 {
     return(cache.GetOrAdd(message.GetType(), messageType =>
     {
         var properties = new List <DataBusPropertyInfo>();
         foreach (var propertyInfo in messageType.GetProperties())
         {
             if (IsDataBusProperty(propertyInfo))
             {
                 properties.Add(new DataBusPropertyInfo
                 {
                     Name = propertyInfo.Name,
                     Getter = DelegateFactory.CreateGet(propertyInfo),
                     Setter = DelegateFactory.CreateSet(propertyInfo)
                 });
             }
         }
         return properties;
     }));
 }
Example #4
0
        internal IEnumerable <DataBusPropertyInfo> GetDataBusProperties(object message)
        {
            var messageType = message.GetType();


            List <DataBusPropertyInfo> value;

            if (!cache.TryGetValue(messageType, out value))
            {
                value = messageType.GetProperties()
                        .Where(IsDataBusProperty)
                        .Select(property => new DataBusPropertyInfo
                {
                    Name   = property.Name,
                    Getter = DelegateFactory.CreateGet(property),
                    Setter = DelegateFactory.CreateSet(property),
                }).ToList();

                cache[messageType] = value;
            }

            return(value);
        }