private void Remove(IComponent component, bool fromKernel) { if (component != null) { rwlock.AcquireWriterLock(Timeout.Infinite); try { IContainerAdapterSite site = component.Site as ContainerAdapterSite; if (site != null && site.Container == this) { if (fromKernel) { if (!Kernel.RemoveComponent(site.EffectiveName)) { throw new ArgumentException("Unable to remove the requested component"); } } component.Site = null; sites.Remove(site); } } finally { rwlock.ReleaseWriterLock(); } } }
public void RemoveComponentFromWindsor() { IComponent component = new Component(); container.Add(component, "myComponent"); IContainerAdapterSite site = component.Site as IContainerAdapterSite; container.Container.Kernel.RemoveComponent(site.EffectiveName); Assert.AreEqual(0, container.Components.Count); }
public void RemoveUnnamedComponent() { IComponent component = new Component(); container.Add(component); IContainerAdapterSite site = component.Site as IContainerAdapterSite; Assert.IsNotNull(site); container.Remove(component); Assert.IsNull(component.Site); Assert.AreEqual(0, container.Components.Count); Assert.IsFalse(container.Container.Kernel.HasComponent(site.EffectiveName)); }
/// <summary> /// Adds the specified <see cref="IComponent"/> to the <see cref="IContainer"/> at the end of the list, /// and assigns a name to the component. /// </summary> /// <param name="component">The <see cref="IComponent"/> to add.</param> /// <param name="name">The unique, case-insensitive name to assign to the component, or null.</param> public virtual void Add(IComponent component, String name) { if (component != null) { rwlock.AcquireWriterLock(Timeout.Infinite); try { ISite site = component.Site; if ((site == null) || (site.Container != this)) { IContainerAdapterSite newSite = CreateSite(component, name); try { Kernel.AddComponentInstance(newSite.EffectiveName, typeof(IComponent), component); } catch (ComponentRegistrationException ex) { throw new ArgumentException(ex.Message); } if (site != null) { site.Container.Remove(component); } component.Site = newSite; sites.Add(newSite); } } finally { rwlock.ReleaseWriterLock(); } } }