4

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

Например: в xml config указано, что компонент службы IInterface должен быть разрешен для ClassA. Все в порядке, но из моего модульного теста я хочу, чтобы тип разрешался вместо FakeClassA. Я не могу использовать container.AddComponent для этого, так как там «уже зарегистрирован компонент для данного ключа ...».

+0

См. Также: Как удалить компоненты с помощью замка 3.0? http://stackoverflow.com/questions/9501209/how-are-components-removed-with-castle-3-0 – Anthony 2013-01-17 11:30:36

ответ

3

IKernel имеет метод RemoveComponent.

Но для модульных испытаний рекомендуется, чтобы вы вообще не использовали контейнер, или если тестовая настройка слишком плотная из-за зависимостей, используйте AutoMockingContainer.

Here's другая (более современная) реализация.

+0

RemoveComponent states "Возвращает true, если указанный компонент был найден и может быть удален (то есть никакой другой компонент не зависит от Это)". Но что, если мы не заботимся о том, что от этого зависит другое, поскольку мы заменим его в следующей строке кода. – crowleym 2009-06-04 11:22:19

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