Component based software engineering is a paradigm of software development that specifies that one should build software against interface dependencies so as to maximize the encapsulation and reusability of components. This paradigm, in many languages, requires inversion of control in order to satisfy this paradigm.
However, component based software engineering isn't inversion of control, it's just a model of software design that is most easily and completely accomplished by using DI and IoC containers. For C#, if you want to go down the route of component based software engineering, then I would look into getting familiar with how DI, IoC, and their respective containers operate.