Clonagem de objetos utilizando ValueInjecter

Quando trabalhamos com mapeamento de objetos em nossas aplicações, é comum ocorrer de precisarmos mapear uma propriedade para uma outra propriedade com o mesmo nome, mas com tipos diferentes.
Por exemplo, há um objeto com uma propriedade chamada Enderecos que é do tipo List<Endereco> e é necessário mapear esta propriedade para um outro objeto que também tenha uma propriedade chamada Enderecos, mas que é do tipo List<EnderecoDto>.
Após pesquisar bastante, fiz algumas alterações no CloneInjection do ValueInjecter para fazer esta clonagem.
Vamos ao exemplo.
Suponhamos que temos uma API e não queremos expor nossos objetos de domínio, então criamos DTO’s para serem utilizadas nas chamadas de nossa API.
Baseado nisso vamos mapear a classe Pessoa para PessoaDto.
Ao tentar fazer o mapeamento, repare que todas as propriedades foram clonadas, menos a lista Enderecos.

Para resolvermos isto vamos criar uma nova classe, que conterá o código para realizar o mapeamento conforme precisamos, segue seu código:
Agora basta executarmos o mapeamento novamente, só que agora na seguinte forma:
Agora a lista Enderecos também foi clonada.

Caso tenham alguma dúvida ou sugestão não deixe de comentar.
O código da aplicação de exemplo está no GitHub, neste link.
Espero ter ajudado. Abraços!

