У меня есть IWindsorContaner, который существует в течение всего времени жизни приложения. Для Unittests можно регистрировать mocks/stubs и т.д. под их Type. Когда тест завершен и фикстура утилизирована, зарегистрированные компоненты в тесте удаляются с помощью самостоятельно созданного метода под названием "Unregister".
Теперь я хочу обновиться до последней версии Castle - 3.0. Согласно примечаниям к версии 3.0, что-то вроде
public void Unregister(string contextName, string registrationName)
{
IWindsorContainer context = GetOrCreateContext(contextName);
context.Kernel.RemoveComponent(registrationName);
}
больше невозможно, потому что метод IKernel.RemoveComponent был удален. Описание, как это исправить, не совсем достаточно ("Попробуйте использовать IHandlerSelectors.").
Упрощенная версия приспособления, которое я использую для unittests:
public sealed class DependencyInjectionFixture : IDisposable
{
private Stack<Type> registeredTypes = new Stack<Type>();
// Registering of mocks/stubs, etc
public void RegisterSingleton<T>(T singleton, string objectName)
{
registeredTypes.Push(typeof(T));
IWindsorContainer context = GetOrCreateContext(contextName);
context.Register(Component.For(typeof(T))
.Named(objectName)
.Instance(singleton)
.LifeStyle.Singleton);
}
// Called when tests ends
public void Dispose()
{
IWindsorContainer context = GetOrCreateContext(contextName);
while (registeredTypes.Count > 0)
context.Kernel.RemoveComponent(CSApplicationContext.GetRegistrationNameFor(registeredTypes.Pop()));
}
}
Как я могу удалить компоненты в Castle 3.0?