예제 #1
0
        /// <summary>
        /// Removes a service registration from the <see cref="WorkItem"/>.
        /// </summary>
        /// <param name="serviceType">The service type to remove.</param>
        public void Remove(Type serviceType)
        {
            Guard.ArgumentNotNull(serviceType, "serviceType");
            DependencyResolutionLocatorKey key = new DependencyResolutionLocatorKey(serviceType, null);

            if (locator.Contains(key, SearchMode.Local))
            {
                object serviceInstance = locator.Get(key, SearchMode.Local);
                bool   isLastInstance  = true;

                locator.Remove(new DependencyResolutionLocatorKey(serviceType, null));

                foreach (KeyValuePair <object, object> kvp in locator)
                {
                    if (ReferenceEquals(kvp.Value, serviceInstance))
                    {
                        isLastInstance = false;
                        break;
                    }
                }

                if (isLastInstance)
                {
                    builder.TearDown(locator, serviceInstance);
                    container.Remove(serviceInstance);

                    if (!(serviceInstance is DemandAddPlaceholder))
                    {
                        OnRemoved(serviceInstance);
                    }
                }
            }
        }
        /// <summary>
        /// Removes an object from the container.
        /// </summary>
        /// <param name="item">The item to be removed.</param>
        public void Remove(TItem item)
        {
            if (container.Contains(item))
            {
                ThrowIfItemRemovalIsNotPermitted(item);

                builder.TearDown(locator, item);
                container.Remove(item);

                List <object> keysToRemove = new List <object>();

                foreach (KeyValuePair <object, object> pair in locator)
                {
                    if (pair.Value.Equals(item))
                    {
                        keysToRemove.Add(pair.Key);
                    }
                }

                foreach (object key in keysToRemove)
                {
                    locator.Remove(key);
                }
            }
        }
            public void OnDisposed(object sender, EventArgs e)
            {
                locator.Remove(key);
                ILifetimeContainer lifetime = locator.Get <ILifetimeContainer>();

                if (lifetime != null)
                {
                    lifetime.Remove(sender);
                }
            }