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();
                }
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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();
                }
            }
        }