Possible Duplicate:
What is Inversion of Control?
I always hear Inversion of Control described in vague terms and almost always through example than a formal definition
On the one hand I hear it described in terms of objects programming to abstractions and giving up having control over explicitly instantiating a new object and it's object graph vs requesting objects that have their dependencies created injected into them runtime conditions
Then I hear it explained in terms of programming against frameworks where the programmer forfeits the flow of control in favor of coding to extension points (eg events and callbacks)
What exactly is being inverted in both cases and what do they have in common that they're equivalent examples of IoC. I've found it surprisingly difficult to find a commonly accepted definition