Uses global factories to avoid instantiating managers and controllers more than once