Как удаляются компоненты в Castle 3.0?

У меня есть 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?

7
задан Antineutrino 29 February 2012 в 15:41
поделиться