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; }
/// <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); } }
/// <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(); } }