Как я могу проверить конфигурацию Виндзорского замка - PullRequest
4 голосов
/ 28 апреля 2010

Я хочу заявить, что мои регистрации действительны, то есть нет отсутствующих зависимостей и нет циклических зависимостей.
Я хотел бы сделать это в моем приложении (а не в модульном тесте), чтобы иметь возможность быстрого сбоя, если конфигурация неверна.
Я также хочу добиться этого без разрешения (и создания экземпляров) всех компонентов - только путем сканирования графа зависимостей.
Есть идеи, как мне это сделать?

Мотивация - это метод проб и ошибок при настройке сложных приложений. Я предпочел бы получить отказоустойчивое поведение в случае плохо настроенного контейнера.

Кстати, мое вдохновение пришло из метода AssertConfigurationIsValid () AutoMapper.

1 Ответ

5 голосов
/ 29 апреля 2010

Вы не можете быть на 100% уверены, так как Виндзор - это динамичный организм, и не все может быть подвергнуто статическому анализу. Все обработчики могут находиться в состоянии WaitingDependency, но ваше приложение может работать на 100%, поскольку во время разрешения зависимости будут предоставлены DynamicParameters, ISubDependencyResolver с или ILazyComponentLoader с.

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

Я бы предложил иметь хорошие, надежные проверяемые соглашения, которые решают, что входит в контейнер, а что нет, и хорошие модульные тесты, которые проверяют контейнер путем разрешения компонентов.

Если вы не против получить ложные негативы, вы можете сделать следующее:

var allHandlers = container.Kernel.GetAssignableHandlers(typeof(object));

, а затем перебрать их и проверить, все ли они Valid, но я бы предпочел специальный тест для этого. Взгляните на этот пост, например .

Настройка приложения не должна быть методом проб и ошибок, и не должна быть. Это вопрос хороших соглашений и их соблюдения. У меня есть два сообщения об этом, которые вы можете найти полезными:

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