1

Background: I have a helper class that I use to set the policies for the ExceptionManager. In this class I want to inject various implementations of the IExceptionHandler interface and I want to control this via a configuration file.

So this is how things look: Helper class and interface:

public class ErrorHelper: IErrorHelper
{
    private static IExceptionHandler _exceptionHandler;
    public ErrorHelper(IExceptionHandler exceptionHandler)
    {
        _exceptionHandler = exceptionHandler;
    }

    public IList<ExeptionPolicyDefinition> GetPolicies()
    {
        //Do stuff here and return policies
        //This is the place where _exceptionHandler is used
    }
}
public interface IErrorHelper
{
    IList<ExeptionPolicyDefinition> GetPolicies();
}

IExceptionHandler implementation:

public class MyExceptionHandler: IExceptionHandler
{
    public MyExceptionHandler()
    {
        //Do some stuff here
    }
    public Exception HandleException(Exception exp, Guid iId)
    {
        //Handle exception and log
    }
}

The unity bootstrap class:

public class UnityBootstrap
{
    private static IUnityContainer _unityContainer;
    public static void RegisterTypes(IUnityContainer container)
    {
        _unityContainer = container;
        var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
        section.Configure(_unityContainer);
    }
    public static void SetPolicies()
    {
        var helper = _unityContainer.Resolve<IErrorHelper>();
        //Set ExceptionManager and ExceptionPolicy
    }
}

Unity configuration file

<?xml version="1.0" encoding="utf-8"?>
<unity xmlns="http://schemas/microsoft.com/practices/2010/unity">
    <alias alias="IExceptionHandler" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.IExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="MyExceptionHandler" type="TEST.Shared.MyExceptionHandler, Test.Shared"/>
    <alias alias="ErrorHelper" type="TEST.Helpers.Errorhelper, TEST.Helpers"/>
    <alias alias="IErrorHelper" type="TEST.Helpers.IErrorhelper, TEST.Helpers"/>
    <container>
        <register type="IExceptionHandler" mapTo="MyExceptionHandler"/>
        <register type="IErrorHelper" mapTo="ErrorHelper">
             <constructor>
                 <param name="exceptionHandler" type="MyExceptionHandler">
                     <dependency type="MyExceptionHandler"/>
                 </param>
             </constructor>
        </register>
    </container>
</unity>

So, after a lot of writing and formatting, this is a simplification of what I have. The problem is that when I call RegisterTypes I get the error in the title, stating that there is no constructor for ErrorHelper that accepts parameters of name exceptionHandler when clearly the parameter name in the constructor is exceptionHandler.

If anyone can point to where I'm going wrong with this please do.

PS1: Sorry for the long question

PS2: I'm pretty new to DI and Unity

1 Answer 1

2

The type of the parameter in the constructor is IExceptionHandler not MyExceptionHandler.

Try: <param name="exceptionHandler" type="IExceptionHandler">

Sign up to request clarification or add additional context in comments.

1 Comment

Well now, I can't believe it was that obvious that it was practically staring me in the face. Thanks, that did the trick.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.