Mercurial > pub > bltoolkit
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; + } + } + } +}