title: Concrete class injection considered bad practice
body: <p>I am curious about dependency inversion principle in general, and whether it should be enforced strictly all the time.</p>
  
  <p>I know that using interfaces to be injected in general promotes loose coupling, which has positive impact.</p>
  
  <p>However, there are certain types of class that will most likely always have only one implementation, and likely not to change over time. I really am questioning having every objects backed by an interface, e.g. FooService, with FooServiceImpl.  </p>
  
  <p>I am in a dilemma because I think concrete class injection is generally frowned upon by many folks.</p>
  
  <p>tl;dr <br>
  Should dependency injection always be done with interfaces only, even when certain classes are unlikely to change, and hence, backing it by interface seems to add unwanted complexity?</p>