How to handle constructor exception when using Autofac WcfIntegration

Viewed 10060

Is there a way to handle an exception thrown by the constructor of a WCF service, when that constructor takes in a dependency, and it is the instantiation of the dependency by the IoC container (AutoFac in this case) that causes the exception?

Consider a WCF service with the following constructor:

public InformationService(IInformationRetriever informationRetriever)
{
    _informationRetriever = informationRetriever;
}
//... the service later makes use of the injected InformationRetriever

The service uses AutoFac WcfIntegration and the AutofacWebServiceHostFactory (this happens to be a RESTful service).

Dependencies are registered in the global.asax.cs of the service, i.e.:

builder.RegisterType<InformationRetriever>()
                .As<IInformationRetriever>()

Now the InformationRetriever implementation performs some checks in its constructor to ensure everything is in place for it to be able to do its job. When it discovers a problem in this phase, it throws an exception.

However, I do not want the caller of the service to receive the AutoFac exception:

An exception was thrown while invoking the constructor ... on type InformationRetriever

Effectively I am trying to test:

Given the InformationService is running

When I call the GetSomeInformation() method

And The InformationRetriever cannot be instantiated

Then I want to return a friendly error message

And Log the actual exception

Is this a problem with my design, or is there a known pattern to overcome or prevent this problem?

I have hunted around and could not find any information on this type of problem.

2 Answers
Related