2016-01-08 5 views
1

Фон: У меня есть вспомогательный класс, который я использую для установки политик для ExceptionManager. В этом классе я хочу ввести различные реализации интерфейса IExceptionHandler, и я хочу контролировать это через файл конфигурации.Ошибка конфигурации Unity - тип не имеет конструктора, который принимает параметры

Так вот как выглядят вещи: класс Helper и интерфейс: осуществление

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:

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

Единство самозагрузки класс:

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

<?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> 

Таким образом, после того, как много написания и форматирования, это упрощение того, что у меня есть. Проблема в том, что когда я вызываю RegisterTypes, я получаю ошибку в заголовке, заявляя, что нет конструктора для ErrorHelper, который принимает параметры имени exceptionHandler, когда понятно, что имя параметра в конструкторе exceptionHandler.

Если кто-то может указать, где я буду не так, пожалуйста, сделайте это.

PS1: Извините за длинный вопрос

PS2: Я довольно новыми для DI и Unity

ответ

1

Тип параметра в конструкторе IExceptionHandler не MyExceptionHandler.

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

+0

Ну теперь, я не могу поверить, что это было то, что очевидно, что практически смотрела мне в лицо. Спасибо, это помогло. –

Смежные вопросы