it's not really IoC... more a component container