IOC does not preclude specifying concrete classes as parameter to be injected in the constructor, although some IOC container implementations my not support this. The IOC container is basically a super factory that can provide instances of classes or interfaces that have been registered with the IOC container or that the container can determine how to build. The Munq IOC Container, for example, can instantiate concrete classes even if they have not been registered, as long as all of the constructor parameters can be provided from the IOC Container. In most IOC Containers, you can register a class that, implements either an Interface or a Base Class, to be provided when either the Interface or Base Class is requested. This means your code now says "I need an instance of class X and I don't care or want to know how to build it, just give it to me" rather than "I need an instance of class X so I'll build up all itsdependencies, and their dependencies to do that. God help me if the dependency hierarchy changes".
"Time flies like an arrow. Fruit flies like a banana."