I\'ve read a number of threads explaining the difference between IoC and DI and while many of explanations contradicted each other, I think
Well this is my point of view:
DIP means that you program against an abstraction. You invert the kind of a dependency from an implementation to an abstraction.
IOC means that somebody else is responsible for getting the implementation for the given abstraction. Normally the consumer would use the new keyword to get a dependency. With IoC you invert the control, so that the consumer is not responsible for creating the instance anymore.
Dependency Injection and Service Location are a part of Inversion of Control.
See also: https://stackoverflow.com/a/10053413/175399