Выдает исключение, если не удается разрешить зависимость - PullRequest
3 голосов
/ 19 июля 2011

Рассмотрим следующий класс:

public class ComponentA
{
    public ComponentB ComponentB { get; set; }

    public ComponentA(ComponentC componentC) { ... }
}

Когда я решаю ComponentA, Касл правильно вводит ComponentB и ComponentC.

Однако, если существует проблема создания экземпляра ComponentB, он проглатывает исключение, что приводит к задержке ошибок (NullReferenceException).

Я понимаю разницу между обоими подходами, но возможно ли сделать так, чтобы он потерпел неудачу (или, по крайней мере, зарегистрировал полное исключение), когда есть проблема с внедренным свойством?

Ответы [ 2 ]

1 голос
/ 19 июля 2011

Основываясь на ответе Маурисио на вопрос, связанный с Филом, я создал StrictComponentActivator, который не поглощает исключение, даже если зависимость является необязательной.

Работает, как ожидалось.

0 голосов
/ 19 июля 2011

Я полагаю, что это ожидаемое поведение, и AFAIK нет никакого способа обойти это.

Может быть вариант использовать закрытый член для ComponentB, который получает реализацию по умолчанию (которая выбрасываетисключение при доступе, если это то, что нужно), но переопределяется контейнером при успешном разрешении.

private ComponentB _b = new ExceptionThrowingComponentB();

public ComponentB B
{
   get { return _b; }
   set { _b = value; }
} 

Как отметил svick: не хорошее решение.

Редактировать: Я не уверен, что понимаю, в чем дело, но звучит так, как будто вы можете изменить это поведение:

Странное поведение Касла Виндзора с введением свойстваи заводской метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...