Mercurial > pub > bltoolkit
diff Source/Mapping/EnumeratorMapper.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/EnumeratorMapper.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,51 @@ +using System; +using System.Collections; + +using BLToolkit.Reflection; + +namespace BLToolkit.Mapping +{ + public class EnumeratorMapper : IMapDataSourceList + { + public EnumeratorMapper(IEnumerator enumerator) + { + _enumerator = enumerator; + } + + private readonly IEnumerator _enumerator; + private Type _objectType; + + #region IMapDataSourceList Members + + public virtual void InitMapping(InitContext initContext) + { + _enumerator.Reset(); + } + + public virtual bool SetNextDataSource(InitContext initContext) + { + if (initContext == null) throw new ArgumentNullException("initContext"); + + if (_enumerator.MoveNext() == false) + return false; + + object sourceObject = _enumerator.Current; + + if (_objectType != sourceObject.GetType()) + { + _objectType = sourceObject.GetType(); + initContext.DataSource = initContext.MappingSchema.GetObjectMapper(_objectType); + } + + initContext.SourceObject = sourceObject; + + return true; + } + + public virtual void EndMapping(InitContext initContext) + { + } + + #endregion + } +}