A simple IoC container