Test from lowest to highest depth first
Populate now calls the factories rather than visa versa, init of Scope corrected