using System.Reflection; using System; using Ant.DbExpressions; using System.Threading; using Ant.Core; using Ant.Core.Emit; using Ant.ORM; namespace Ant.Descriptors { public class FieldDescriptor : MappingMemberDescriptor { FieldInfo _fieldInfo; DbColumn _column; Func _valueGetter = null; Action _valueSetter = null; public FieldDescriptor(FieldInfo fieldInfo, FiledMetaData declaringEntityDescriptor, string columnName) : base(declaringEntityDescriptor) { this._fieldInfo = fieldInfo; this._column = new DbColumn(columnName, fieldInfo.FieldType); } /// /// 获取有关成员特性的信息并提供对成员元数据的访问 /// public override MemberInfo MemberInfo { get { return this._fieldInfo; } } /// /// 表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型 /// public override Type MemberInfoType { get { return this._fieldInfo.FieldType; } } /// /// 标记每个已定义为 MemberInfo 的派生类的成员类型 /// public override MemberTypes MemberType { get { return MemberTypes.Field; } } public override DbColumn Column { get { return this._column; } } /// /// 获取列的值 /// /// /// public override object GetValue(object instance) { if (null == this._valueGetter) { if (Monitor.TryEnter(this)) { try { if (null == this._valueGetter) { this._valueGetter = DelegateGenerator.CreateValueGetter(this._fieldInfo); } } finally { Monitor.Exit(this); } } else { return this._fieldInfo.GetValue(instance); } } return this._valueGetter(instance); } /// /// 给列进行赋值 /// /// /// public override void SetValue(object instance, object value) { if (null == this._valueSetter) { if (Monitor.TryEnter(this)) { try { if (null == this._valueSetter) { this._valueSetter = DelegateGenerator.CreateValueSetter(this._fieldInfo); } } finally { Monitor.Exit(this); } } else { this._fieldInfo.SetValue(instance, value); return; } } this._valueSetter(instance, value); } } }