Mercurial > pub > bltoolkit
view Source/Mapping/ObjectListMapper.cs @ 9:1e85f66cf767 default tip
update bltoolkit
author | nickolay |
---|---|
date | Thu, 05 Apr 2018 20:53:26 +0300 |
parents | f990fcb411a9 |
children |
line wrap: on
line source
using System.Collections; using BLToolkit.Reflection; namespace BLToolkit.Mapping { public class ObjectListMapper : IMapDataSourceList, IMapDataDestinationList { public ObjectListMapper(IList list, ObjectMapper objectMapper) { _list = list; _mapper = objectMapper; } private readonly IList _list; private ObjectMapper _mapper; private int _currentItem; #region IMapDataSourceList Members void IMapDataSourceList.InitMapping(InitContext initContext) { initContext.DataSource = _mapper; } bool IMapDataSourceList.SetNextDataSource(InitContext initContext) { if (_currentItem >= _list.Count) return false; initContext.SourceObject = _list[_currentItem]; _currentItem++; return true; } void IMapDataSourceList.EndMapping(InitContext initContext) { } #endregion #region IMapDataDestinationList Members void IMapDataDestinationList.InitMapping(InitContext initContext) { ISupportMapping sm = _list as ISupportMapping; if (sm != null) { sm.BeginMapping(initContext); if (initContext.ObjectMapper != null && _mapper != initContext.ObjectMapper) _mapper = initContext.ObjectMapper; } } IMapDataDestination IMapDataDestinationList.GetDataDestination(InitContext initContext) { return _mapper; } private object _currentObject; private void AddCurrent() { if (_currentObject != null) { _list.Add(_currentObject); _currentObject = null; } } object IMapDataDestinationList.GetNextObject(InitContext initContext) { AddCurrent(); return _currentObject = _mapper.CreateInstance(initContext); } void IMapDataDestinationList.EndMapping(InitContext initContext) { AddCurrent(); ISupportMapping sm = _list as ISupportMapping; if (sm != null) sm.EndMapping(initContext); } #endregion } }