I suspect that the Installer class is responsible for chaining the Install, Uninstall, and Commit calls to children. If so, AssemblyInstaller just needs to add all the runnable installers to itself and let Installer do the work of making sure they're invoked. This needs a test case.