a simple implementation of an IoC container in C#