/// <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; }
/// <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); }
/// <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); }
/// <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; }