public void Example()
        {
            // Create the object mapper
            var mapper = new ResourceMapper <SimpleDictionaryContext>();

            mapper.RegisterOneWayMapping <SourceEntity, DestEntity>(mapping =>
            {
                mapping.SetChildContext((from, to, context) => context.Set("ParentVariable", from.Id));
            });
            mapper.RegisterOneWayMapping <ChildEntity, ChildEntity>(mapping =>
            {
                mapping.Set(to => to.ParentId, (from, to, context) => context.Get <int>("ParentVariable"));
            });
            mapper.InitializeMap();

            // Create source object
            var sourceObj = new SourceEntity {
                Id    = 10,
                Child = new ChildEntity {
                    Variable = 103
                }
            };

            var destObj = new DestEntity();

            var mapContext = new SimpleDictionaryContext();

            // Perform map
            mapper.Map(sourceObj, destObj, mapContext);

            Assert.Throws <KeyNotFoundException>(() => mapContext.Get <int>("ParentVariable"));
            Assert.AreEqual(sourceObj.Child.Variable, destObj.Child.Variable);
            Assert.AreEqual(sourceObj.Id, destObj.Child.ParentId);
        }
            object ICloneable.Clone()
            {
                // this is only a shallow clone, so it is recommended not to store complex data
                // structures in this dictionary as child contexts may unintentionally modify it
                var newValue = new SimpleDictionaryContext();

                foreach (KeyValuePair <string, object> pair in _data)
                {
                    newValue._data[pair.Key] = pair.Value;
                }
                return(newValue);
            }