Ответ 1
Для создания переопределяющего экземпляра вам необходимо сделать две вещи:
- Назначьте ему уникальное имя
- Вызвать метод
IsDefault
Итак, чтобы привести пример в действие:
this.WindsorContainer.Register(
Component.For<IMediaPlayerProxyFactory>()
.Instance(mockMediaPlayerProxyFactory)
.IsDefault()
.Named("OverridingFactory")
);
Поскольку я планирую использовать этот переопределяющий patten во многих тестах, я создал свой собственный метод расширения:
public static class TestWindsorExtensions
{
public static ComponentRegistration<T> OverridesExistingRegistration<T>(this ComponentRegistration<T> componentRegistration) where T : class
{
return componentRegistration
.Named(Guid.NewGuid().ToString())
.IsDefault();
}
}
Теперь можно упростить пример:
this.WindsorContainer.Register(
Component.For<IMediaPlayerProxyFactory>()
.Instance(mockMediaPlayerProxyFactory)
.OverridesExistingRegistration()
);
Позднее Редактировать
В версии 3.1 представлен метод IsFallback
. Если я зарегистрирую все мои исходные компоненты с помощью IsFallback
, то любые новые регистрации автоматически переопределяют эти начальные регистрации. Я бы пошел по этому пути, если бы функциональность была доступна в то время.
https://github.com/castleproject/Windsor/blob/master/docs/whats-new-3.1.md#fallback-components