Using extension methods on null objects

One feature that is often disregarded in extension methods is that they get called for null objects. While instrumenting parts of OpenRasta, I faced the problem of having some classes not always created through the container. As such, sometimes their Log property would be null, and each call to a logging method would have to check for that condition. After doing a few back-and-forth, I settled on using an extension method, coupled with a null object.

Take a simple class, and add a Log property.

public class LoggingClass


    public ILogger Log { get; set; }


Then, create a simple extension method on the ILogger, and return a null object

        public static ILogger Safe(this ILogger logger)


            if (logger == null)

                return NullLogger.Instance;


                return logger;


Now all the logging code can simply call the Safe() method to ensure that, in the absence of a logger, a null object will be used instead. The code using it looks like the following.

        public void DoSomething()


            Log.Safe().WriteDebug("I did something!");