Я знаю, что опоздал на игру, но столкнулся с этой же проблемой.Моя проблема заключалась в том, что из-за размера приложения первый запуск Castle Windsor был очень медленным (1 с +), и создание нового контекста для каждого теста становилось обременительным (600 тестов, 5 минут ожидания только на Castle Windsor)
Я основал свое решение на Как удалить компонент в Castle Windsor 3.0?
public class WindsorHandlerOverride : IHandlerSelector
{
private Dictionary<Type, object> definedTypeBehaviours;
public bool HasOpinionAbout(string key, Type service)
{
return definedTypeBehaviours.IsNotNullAndAny(t => t.Key == service);
}
public IHandler SelectHandler(string key, Type service, IHandler[] handlers)
{
var theValue = definedTypeBehaviours[service];
return new WindsorSimpleHandler {TheValue = theValue};
}
public void CleanUp()
{
definedTypeBehaviours = null;
}
public void OverrideBehaviour(Type type, object value)
{
if (definedTypeBehaviours == null)
{
definedTypeBehaviours = new Dictionary<Type, object>();
}
definedTypeBehaviours.Add(type, value);
}
}
и
public class WindsorSimpleHandler : IHandler
{
public object TheValue { get; set; }
public ComponentModel ComponentModel { get; set; }
public HandlerState CurrentState { get; set; }
public bool CanResolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model,
DependencyModel dependency)
{
return true;
}
public object Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model,
DependencyModel dependency)
{
return TheValue;
}
public object Resolve(CreationContext context)
{
return TheValue;
}...
Затем, где бы вы ни настраивали Windsor
WindsorOverrider = new WindsorHandlerOverride();
container.Kernel.AddHandlerSelector(WindsorOverrider);
И когда вы хотите переопределить поведение замка Виндзора по умолчанию в тесте
WindsorOverrider.OverrideBehaviour(typeof(IService), mock.Object);
И при тестовом разрыве вызова
WindsorOverrider.CleanUp();