Beispiel #1
0
        /// <summary>
        /// Creates a new instance of the safe field wrapper.
        /// </summary>
        /// <param name="field">Field to wrap.</param>
        public SafeField(FieldInfo field)
        {
            AssertUtils.ArgumentNotNull(field, "You cannot create a dynamic field for a null value.");

            fieldInfo = field;
            DynamicFieldCacheEntry fi = GetOrCreateDynamicField(field);

            getter = fi.Getter;
            setter = fi.Setter;
        }
Beispiel #2
0
        /// <summary>
        /// Obtains cached fieldInfo or creates a new entry, if none is found.
        /// </summary>
        private static DynamicFieldCacheEntry GetOrCreateDynamicField(FieldInfo field)
        {
            DynamicFieldCacheEntry fieldInfo = (DynamicFieldCacheEntry)fieldCache[field];

            if (fieldInfo == null)
            {
                fieldInfo = new DynamicFieldCacheEntry(DynamicReflectionManager.CreateFieldGetter(field), DynamicReflectionManager.CreateFieldSetter(field));
                lock (fieldCache)
                {
                    fieldCache[field] = fieldInfo;
                }
            }
            return(fieldInfo);
        }
Beispiel #3
0
        /// <summary>
        ///     Obtains cached fieldInfo or creates a new entry, if none is found.
        /// </summary>
        private static DynamicFieldCacheEntry GetOrCreateDynamicField(FieldInfo field)
        {
            DynamicFieldCacheEntry fieldInfo;

            if (!_fieldCache.TryGetValue(field, out fieldInfo))
            {
                fieldInfo = new DynamicFieldCacheEntry(DynamicReflectionManager.CreateFieldGetter(field),
                                                       DynamicReflectionManager.CreateFieldSetter(field));
                lock (_fieldCache)
                {
                    _fieldCache[field] = fieldInfo;
                }
            }
            return(fieldInfo);
        }
Beispiel #4
0
 /// <summary>
 ///     Obtains cached fieldInfo or creates a new entry, if none is found.
 /// </summary>
 private static DynamicFieldCacheEntry GetOrCreateDynamicField(FieldInfo field)
 {
     DynamicFieldCacheEntry fieldInfo;
     if (!_fieldCache.TryGetValue(field, out fieldInfo))
     {
         fieldInfo = new DynamicFieldCacheEntry(DynamicReflectionManager.CreateFieldGetter(field),
             DynamicReflectionManager.CreateFieldSetter(field));
         lock (_fieldCache)
         {
             _fieldCache[field] = fieldInfo;
         }
     }
     return fieldInfo;
 }