Well this at least makes it more clear what the heck they were intended to solve... since I've done the bulk of my career with Python I've been blissfully ignorant of such things. Coming to C# it was a rather abrupt discovery that so many things I would just do with metaprogramming via class constructor parameters and passing arguments into the class object at creation time, were being done via complex dependency injection as if more simple mechanisms weren't available...<p>Good history lesson at least.