public void ShouldUseATypedToTarget()
        {
            using (var mapper = Mapper.CreateNew())
            {
                mapper.WhenMapping
                .From <Issue123.CompositeDto>().To <Issue123.IComposite>()
                .If(ctx => ctx.Source.Type == Issue123.CompositeType.Leaf)
                .Map(ctx => ctx.Source.Leaf)
                .ToTarget <Issue123.Leaf>()
                .AndWhenMapping
                .From <Issue123.LeafDto>().To <Issue123.Leaf>()
                .Map((dto, l) => dto.Description + "!")
                .To(l => l.Description);

                var leafDto = new Issue123.CompositeDto
                {
                    Type = Issue123.CompositeType.Leaf,
                    Leaf = new Issue123.LeafDto {
                        Description = "I am a leaf"
                    }
                };

                var leaf = mapper.Map(leafDto).ToANew <Issue123.IComposite>() as Issue123.Leaf;

                leaf.ShouldNotBeNull();

                // ReSharper disable once PossibleNullReferenceException
                leaf.Description.ShouldBe("I am a leaf!");
            }
        }
        public void ShouldMapToAnInterfaceConditionally()
        {
            using (var mapper = Mapper.CreateNew())
            {
                mapper.WhenMapping
                .From <Issue123.GroupDto>()
                .To <Issue123.Group>()
                .Map(dto => dto.Eman, g => g.Name);

                mapper.WhenMapping
                .From <Issue123.CompositeDto>().To <Issue123.IComposite>()
                .If(ctx => ctx.Source.Type == Issue123.CompositeType.Group)
                .MapTo <Issue123.Group>()
                .And
                .If(ctx => ctx.Source.Type == Issue123.CompositeType.Leaf)
                .MapTo <Issue123.Leaf>();

                mapper.WhenMapping
                .From <Issue123.CompositeDto>().To <Issue123.Group>()
                .Map(ctx => ctx.Source.Group).ToTarget();

                mapper.WhenMapping
                .From <Issue123.CompositeDto>().To <Issue123.Leaf>()
                .Map(ctx => ctx.Source.Leaf).ToTarget();

                var groupDto = new Issue123.CompositeDto
                {
                    Type  = Issue123.CompositeType.Group,
                    Group = new Issue123.GroupDto {
                        Eman = "composite group"
                    }
                };

                var group = mapper.Map(groupDto).ToANew <Issue123.IComposite>() as Issue123.Group;

                group.ShouldNotBeNull();

                // ReSharper disable once PossibleNullReferenceException
                group.Name.ShouldBe("composite group");
                group.Children.ShouldBeEmpty();

                var leafDto = new Issue123.CompositeDto
                {
                    Type = Issue123.CompositeType.Leaf,
                    Leaf = new Issue123.LeafDto {
                        Description = "Leaf"
                    }
                };

                var leaf = mapper.Map(leafDto).ToANew <Issue123.IComposite>() as Issue123.Leaf;

                leaf.ShouldNotBeNull();

                // ReSharper disable once PossibleNullReferenceException
                leaf.Description.ShouldBe("Leaf");
            }
        }