Microsoft.Unity не Unity.Resolve <ILogger>, когда у моего конкретного класса есть два конструктора? - PullRequest
3 голосов
/ 26 августа 2010

У меня есть конкретный класс logger, который Microsoft.Unity разрешит ILogger в.

У класса регистратора есть два конструктора:

1. public logger()
2. public logger(List<BaseLogger> Loggers)

У меня есть раздел единицыв моем файле web.config, который выглядит следующим образом:

<unity>
<containers>
  <container>
    <types>

      <type type="MyCompany.Logger.ILogger, MyCompany.Logger"
           mapTo="MyCompany.Logger.logger, MyCompany.Logger">

      </type>
    </types>
   </container>
  </containers>
</unity>

Если я удалю конструктор, указанный как 2, класс регистратора будет успешно разрешен Unity.Когда я добавляю его обратно, я получаю эту ошибку ...

Не удалось разрешить зависимость, type = "MyCompany.Logger.ILogger", name = "(none)".Исключение произошло во время: при разрешении.Исключением является: InvalidOperationException - Тип List`1 имеет несколько конструкторов длины 1. Невозможно устранить неоднозначность.

Может кто-нибудь объяснить, как я могу изменить свою запись web.config для обработки, имеющей «2.»перечислил перегруженный конструктор в логгере для работы при попытке Unity.Resolve?

1 Ответ

3 голосов
/ 26 августа 2010

Unity по умолчанию пытается создать экземпляр, используя конструктор с максимальным количеством параметров.

Чтобы указать, какой из них использовать, вам нужно использовать конструктор внедрения. Вы можете либо отметить конструктор, который будет использоваться с атрибутом InjectionConstructor, либо указать конструктор в конфигурации. Это должно помочь.

Я понимаю, что документация по MSDN недостаточно хороша. Посмотрите это , если это поможет. Я не могу найти ссылку на статью, которую я прочитал сегодня в офисе. Это было довольно хорошее описание. Удачи, если вы можете найти это или лучше.

...