Olá Vinicius, creio que alguma coisa na explicação tenha fica "perdido".
Na verdade eu achei um pouco estranho pq já havia estudado o conceito de container anos atrás e era um pouco diferente o funcionamento. No caso do nosso exemplo ao passar o nome do nosso controller para método get ele verifica através de reflexão o que o nosso construct precisa e daí faz a instanciação?
Eu poderia criar o controller de outra forma tb via container? Por exemplo, explicitar toda a criação do controller através do addDefinitions e retornando já um objeto pronto? Como você fez é mais elegante, mas queria saber se posso fazer dessa outra forma tb.