public void Dispose() { if (_isDisposed) { return; } foreach (var item in _moduleStates) { item.Value.Dispose(); } CoClasses?.Clear(); RemoveEventHandlers(); VBEEvents.Terminate(); _moduleStates.Clear(); // no lock because nobody should try to update anything here _projectRepository.Dispose(); _isDisposed = true; }