/// <summary> /// /// </summary> /// <param name="targetType"></param> /// <param name="accessorType"></param> /// <returns></returns> public static IClassAccessor GetClassAccessor(Type targetType, AccessorType accessorType) { ArgumentAssertion.IsNotNull(targetType, "targetType"); IClassAccessor accessor = null; var typeKey = string.Format("{0}.{1}", accessorType, targetType.FullName); if (ClassAccessores.ContainsKey(typeKey)) { accessor = ClassAccessores[typeKey]; } else { lock (SyncObject) { if (ClassAccessores.ContainsKey(typeKey)) { accessor = ClassAccessores[typeKey]; } else { accessor = ClassAccessorFactory.CreateClassAccessor(targetType, accessorType); ClassAccessores.Add(typeKey, accessor); } } } return(accessor); }
/// <summary> /// 获取指定类型的可以被持久化的属性列表 /// </summary> /// <param name="type"></param> /// <param name="accessor"></param> /// <returns></returns> static IDictionary <string, Type> GetPersistProperties(this Type type, IClassAccessor accessor) { var targetProperties = accessor.PropertyAccessores; var propertyTypes = new Dictionary <string, Type>(targetProperties.Count); foreach (var pair in targetProperties) { var prop = pair.Value; var propName = prop.Name; var propType = prop.PropertyType; if (prop.CanRead && prop.CanWrite && prop.NonSerialized == false) { propertyTypes.Add(propName, propType); } } return(propertyTypes); }
/// <summary> /// /// </summary> /// <param name="targetType"></param> /// <param name="accessorType"></param> /// <returns></returns> public static IClassAccessor CreateClassAccessor(Type targetType, AccessorType accessorType) { IClassAccessor accessor = null; switch (accessorType) { case AccessorType.Reflection: { accessor = new ReflectionClassAccessor(targetType); break; } default: { accessor = new EmitClassAccessor(targetType); break; } } return(accessor); }
public override void VisitClassAccessor <TAttributeGroup, TMethodBody>(IClassAccessor <TAttributeGroup, TMethodBody> accessor) { visitor.VisitAccessorWithReflection((AccessorWithReflection)(object)accessor); }