The notion that a class declare in its constructor arguments what services it will need, so that they can be instantiated and injected in.


Constructors are totally under-appreciated things.

A class that has a constructor that has no arguments is … a lier.

It’s basically saying “I’m cool. To do this work, I don’t need anything.” And then somewhere in one of its methods, it goes and instantiates a service that it needs to complete it’s work. It lied.

What it should have said is…“I’m cool to do the work you are asking – but to do it, at some point, I may need the following service. Please instantiate it for me, and pass it to me in my constructor”.

Pay the cost up front – find out if the logger’s config is correctly set up BEFORE you make classes that need it. Etc.

There’s nothing like honesty.

Contrast the following two examples:

     public class PoorObject 

       public void DoSomething (){
         //Current may be null when you go to use it...(A UnitTest would fail for example)


    public class BetterObject
        IAuthenticationService _authenticationService;
        public SomeObject(IAuthenticationService authenticationService){
          _authenticationService = authenticationService;
        public void DoSomething(){
         //service is guaranteed to be available at this point: