What is dependency injection and when should I realistically use it - C#