/// <summary> /// Closes the specified project that is active in the service and frees associated resources /// </summary> /// <param name="projectTree">Project to be closed</param> public virtual void CloseProject(ProjectTree projectTree) { if (projectTree is null) { throw new InvalidOperationException($"{nameof(CloseProject)} parameter '{nameof(projectTree)}' was null"); } if (_projects.Contains(projectTree)) { foreach (var resource in projectTree.EnumerateBreadthFirst().Select(x => x.Item).OfType <IDisposable>()) { resource.Dispose(); } _projects.Remove(projectTree); } }