diff Source/Mapping/MemberMapperAttribute.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/Mapping/MemberMapperAttribute.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,52 @@
+using System;
+
+namespace BLToolkit.Mapping
+{
+	[AttributeUsage(
+		AttributeTargets.Class    | AttributeTargets.Interface | 
+		AttributeTargets.Property | AttributeTargets.Field,
+		AllowMultiple=true)]
+	public class MemberMapperAttribute : MapImplicitAttribute
+	{
+		public MemberMapperAttribute(Type memberMapperType)
+			: this(null, memberMapperType)
+		{
+		}
+
+		public MemberMapperAttribute(Type memberType, Type memberMapperType)
+		{
+			if (memberMapperType == null) throw new ArgumentNullException("memberMapperType");
+
+			_memberType       = memberType;
+			_memberMapperType = memberMapperType;
+		}
+
+		private readonly Type _memberType;
+		public           Type  MemberType
+		{
+			get { return _memberType; }
+		}
+
+		private readonly Type _memberMapperType;
+		public           Type  MemberMapperType
+		{
+			get { return _memberMapperType; }
+		}
+
+		public virtual MemberMapper MemberMapper
+		{
+			get
+			{
+				var mm = Activator.CreateInstance(_memberMapperType) as MemberMapper;
+
+				if (mm == null)
+					throw new ArgumentException(
+						string.Format("Type '{0}' is not MemberMapper.", _memberMapperType));
+
+				mm.IsExplicit = true;
+
+				return mm;
+			}
+		}
+	}
+}