What is dependency injection and when should I realistically use it

Recently I've got some critics from people saying I should not create a Helper / Utils class with a bunch of public static methods and that I should rather use DI practices for it
For me my approach makes sense since my Utils are only supposed to exist once in the whole program so I can access it from everywhere
So what exactly is bad about my approach?
Was this page helpful?