VScode uses interface classes extensively, you can see usage of advanced Inverse of Control paradigm everywhere. It seems that VScode has indeed learned a lot from Eclipse's years of IDE development. Designing rigorous interfaces using Inverse of Control paradigm allows for the precise definition of highly controlled yet general processes …
Let's sum it up: Don't bother trying to understand dependency injection, just do things the way you think is more "correct".
If you don't know DI before, the lecture below is a starting point:
And this post …