diff Source/Reflection/MetadataProvider/MetadataProviderList.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/Reflection/MetadataProvider/MetadataProviderList.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,473 @@
+using System;
+using System.Collections.Generic;
+
+namespace BLToolkit.Reflection.MetadataProvider
+{
+	using DataAccess;
+	using Extension;
+	using Mapping;
+
+	public class MetadataProviderList : MetadataProviderBase
+	{
+		#region Init
+
+		public MetadataProviderList()
+		{
+			AddProvider(new ExtensionMetadataProvider());
+			AddProvider(new AttributeMetadataProvider());
+#if !SILVERLIGHT
+			AddProvider(new LinqMetadataProvider());
+#endif
+		}
+
+		private readonly List<MetadataProviderBase> _list = new List<MetadataProviderBase>(3);
+
+		#endregion
+
+		#region Provider Support
+
+		public override void AddProvider(MetadataProviderBase provider)
+		{
+			_list.Add(provider);
+		}
+
+		public override void InsertProvider(int index, MetadataProviderBase provider)
+		{
+			_list.Insert(index, provider);
+		}
+
+		public override MetadataProviderBase[] GetProviders()
+		{
+			return _list.ToArray();
+		}
+
+		#endregion
+
+		#region GetFieldName
+
+		public override string GetFieldName(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var name = p.GetFieldName(typeExtension, member, out isSet);
+
+				if (isSet)
+					return name;
+			}
+
+			return base.GetFieldName(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetFieldStorage
+
+		public override string GetFieldStorage(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var name = p.GetFieldStorage(typeExtension, member, out isSet);
+
+				if (isSet)
+					return name;
+			}
+
+			return base.GetFieldStorage(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetInheritanceDiscriminator
+
+		public override bool GetInheritanceDiscriminator(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetInheritanceDiscriminator(typeExtension, member, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetInheritanceDiscriminator(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region EnsureMapper
+
+		public override void EnsureMapper(TypeAccessor typeAccessor, MappingSchema mappingSchema, EnsureMapperHandler handler)
+		{
+			foreach (var p in _list)
+				p.EnsureMapper(typeAccessor, mappingSchema, handler);
+		}
+
+		#endregion
+
+		#region GetMapIgnore
+
+		public override bool GetMapIgnore(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var ignore = p.GetMapIgnore(typeExtension, member, out isSet);
+
+				if (isSet)
+					return ignore;
+			}
+
+			return base.GetMapIgnore(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetMapField
+
+		public override MapFieldAttribute GetMapField(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var attr = p.GetMapField(typeExtension, member, out isSet);
+
+				if (attr != null) 
+					return attr;
+			}
+
+			return base.GetMapField(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetDbType
+
+		[CLSCompliant(false)]
+		public override DbTypeAttribute GetDbType(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var attr = p.GetDbType(typeExtension, member, out isSet);
+
+				if (attr != null)
+					return attr;
+			}
+
+			return base.GetDbType(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetPrimaryKey
+
+		public override PrimaryKeyAttribute GetPrimaryKey(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var attr = p.GetPrimaryKey(typeExtension, member, out isSet);
+
+				if (attr != null)
+					return attr;
+			}
+
+			return base.GetPrimaryKey(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetTrimmable
+
+		public override bool GetTrimmable(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			if (member.Type == typeof(string))
+			{
+				foreach (var p in _list)
+				{
+					var trimmable = p.GetTrimmable(typeExtension, member, out isSet);
+
+					if (isSet)
+						return trimmable;
+				}
+			}
+
+			return base.GetTrimmable(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetMapValues
+
+		public override MapValue[] GetMapValues(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetMapValues(typeExtension, member, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetMapValues(typeExtension, member, out isSet);
+		}
+
+		public override MapValue[] GetMapValues(TypeExtension typeExt, Type type, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetMapValues(typeExt, type, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetMapValues(typeExt, type, out isSet);
+		}
+
+		#endregion
+
+		#region GetDefaultValue
+
+		public override object GetDefaultValue(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetDefaultValue(mappingSchema, typeExtension, member, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetDefaultValue(mappingSchema, typeExtension, member, out isSet);
+		}
+
+		public override object GetDefaultValue(MappingSchema mappingSchema, TypeExtension typeExtension, Type type, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetDefaultValue(mappingSchema, typeExtension, type, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetDefaultValue(mappingSchema, typeExtension, type, out isSet);
+		}
+
+		#endregion
+
+		#region GetNullable
+
+		public override bool GetNullable(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetNullable(mappingSchema, typeExtension, member, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetNullable(mappingSchema, typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+        #region GetLazyInstance
+
+        public override bool GetLazyInstance(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+        {
+            foreach (var p in _list)
+            {
+                var value = p.GetLazyInstance(mappingSchema, typeExtension, member, out isSet);
+
+                if (isSet)
+                    return value;
+            }
+
+            return base.GetLazyInstance(mappingSchema, typeExtension, member, out isSet);
+        }
+
+        #endregion
+
+		#region GetNullValue
+
+		public override object GetNullValue(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetNullValue(mappingSchema, typeExtension, member, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetNullValue(mappingSchema, typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetDbName
+
+		public override string GetDatabaseName(Type type, ExtensionList extensions, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetDatabaseName(type, extensions, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetDatabaseName(type, extensions, out isSet);
+		}
+
+		#endregion
+
+		#region GetOwnerName
+
+		public override string GetOwnerName(Type type, ExtensionList extensions, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetOwnerName(type, extensions, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetOwnerName(type, extensions, out isSet);
+		}
+
+		#endregion
+
+		#region GetTableName
+
+		public override string GetTableName(Type type, ExtensionList extensions, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetTableName(type, extensions, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetTableName(type, extensions, out isSet);
+		}
+
+		#endregion
+
+		#region GetPrimaryKeyOrder
+
+		public override int GetPrimaryKeyOrder(Type type, TypeExtension typeExt, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetPrimaryKeyOrder(type, typeExt, member, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetPrimaryKeyOrder(type, typeExt, member, out isSet);
+		}
+
+		#endregion
+
+        public override string GetSequenceName(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+        {
+            foreach (var p in _list)
+            {
+                var value = p.GetSequenceName(typeExtension, member, out isSet);
+
+                if (isSet)
+                    return value;
+            }
+
+            return base.GetSequenceName(typeExtension, member, out isSet);
+        }
+
+	    #region GetNonUpdatableFlag
+
+		public override NonUpdatableAttribute GetNonUpdatableAttribute(Type type, TypeExtension typeExt, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var value = p.GetNonUpdatableAttribute(type, typeExt, member, out isSet);
+
+				if (isSet)
+					return value;
+			}
+
+			return base.GetNonUpdatableAttribute(type, typeExt, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetSqlIgnore
+
+		public override bool GetSqlIgnore(TypeExtension typeExtension, MemberAccessor member, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var ignore = p.GetSqlIgnore(typeExtension, member, out isSet);
+
+				if (isSet)
+					return ignore;
+			}
+
+			return base.GetSqlIgnore(typeExtension, member, out isSet);
+		}
+
+		#endregion
+
+		#region GetRelations
+
+		public override List<MapRelationBase> GetRelations(MappingSchema schema, ExtensionList typeExt, Type master, Type slave, out bool isSet)
+		{
+			foreach (var p in _list)
+			{
+				var relations = p.GetRelations(schema, typeExt, master, slave, out isSet);
+
+				if (isSet)
+					return relations;
+			}
+
+			return base.GetRelations(schema, typeExt, master, slave, out isSet);
+		}
+
+		#endregion
+
+		#region GetAssociation
+
+		public override Association GetAssociation(TypeExtension typeExtension, MemberAccessor member)
+		{
+			foreach (var p in _list)
+			{
+				var attr = p.GetAssociation(typeExtension, member);
+
+				if (attr != null)
+					return attr;
+			}
+
+			return base.GetAssociation(typeExtension, member);
+		}
+
+		#endregion
+
+		#region GetInheritanceMapping
+
+		public override InheritanceMappingAttribute[] GetInheritanceMapping(Type type, TypeExtension typeExtension)
+		{
+			foreach (var p in _list)
+			{
+				var attrs = p.GetInheritanceMapping(type, typeExtension);
+
+				if (attrs.Length > 0)
+					return attrs;
+			}
+
+			return base.GetInheritanceMapping(type, typeExtension);
+		}
+
+		#endregion
+	}
+}