Exemplo n.º 1
0
        private void InitializeFields()
        {
            if (builder == null)
            {
                builder = parent.builder;
            }

            if (locator == null)
            {
                locator = new Locator(parent.locator);
            }

            if (!locator.Contains(typeof(ILifetimeContainer), SearchMode.Local))
            {
                locator.Add(typeof(ILifetimeContainer), lifetime);
            }

            ObjectBuiltNotificationPolicy policy = builder.Policies.Get <ObjectBuiltNotificationPolicy>(null, null);

            if (policy != null)
            {
                policy.AddedDelegates[this]   = new ObjectBuiltNotificationPolicy.ItemNotification(OnObjectAdded);
                policy.RemovedDelegates[this] = new ObjectBuiltNotificationPolicy.ItemNotification(OnObjectRemoved);
            }

            LocateWorkItem(typeof(WorkItem));
            LocateWorkItem(GetType());

            status = WorkItemStatus.Inactive;
        }
Exemplo n.º 2
0
        /// <summary>
        /// See <see cref="IBuilderAware.OnTearingDown"/> for more information.
        /// </summary>
        public virtual void OnTearingDown()
        {
            ObjectBuiltNotificationPolicy policy = builder.Policies.Get <ObjectBuiltNotificationPolicy>(null, null);

            if (policy != null)
            {
                policy.AddedDelegates.Remove(this);
                policy.RemovedDelegates.Remove(this);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Internal dispose method.
        /// </summary>
        /// <param name="disposing">Set to true if called from Dispose;
        /// set to false if called from the finalizer.</param>
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (status == WorkItemStatus.Terminated)
                {
                    return;
                }

                ChangeStatus(WorkItemStatus.Terminated);
                builder.TearDown(locator, this);
                uiExtensionSiteCollection.Dispose();

                ObjectBuiltNotificationPolicy policy = builder.Policies.Get <ObjectBuiltNotificationPolicy>(null, null);

                if (policy != null)
                {
                    policy.AddedDelegates.Remove(this);
                    policy.RemovedDelegates.Remove(this);
                }

                if (state != null)
                {
                    ReleaseState();
                }

                if (parent != null)
                {
                    List <object> ids = new List <object>();

                    foreach (KeyValuePair <object, object> pair in parent.locator)
                    {
                        if (pair.Value == this)
                        {
                            ids.Add(pair.Key);
                        }
                    }

                    foreach (object id in ids)
                    {
                        parent.locator.Remove(id);
                    }

                    parent.lifetime.Remove(this);

                    foreach (object smartpart in smartPartInfos.Keys)
                    {
                        RootWorkItem.smartPartInfos.Remove(smartpart);
                    }
                }

                lifetime.Remove(this);

                List <object> lifetimeObjects = new List <object>();
                lifetimeObjects.AddRange(lifetime);

                foreach (object obj in lifetimeObjects)
                {
                    if (lifetime.Contains(obj))
                    {
                        builder.TearDown(locator, obj);
                    }
                }

                lifetime.Dispose();
                OnDisposed();
            }
        }