private void _reference_Disposed(object sender, EventArgs e) { ReferenceDisposed?.Invoke(sender, EventArgs.Empty); if (sender is IDto dto && _knownDtos.TryRemove(dto.DtoGuid, out var disposed) && sender == disposed) { disposed.PropertyChanged -= _referencePropertyChanged; disposed.Disposed -= _reference_Disposed; Debug.WriteLine(disposed, $"Reference resolver - object {disposed.DtoGuid} disposed, generation is {GC.GetGeneration(dto)}"); } }
private void _reference_Disposed(object sender, EventArgs e) { ReferenceDisposed?.Invoke(sender, EventArgs.Empty); if (!(sender is IDto dto) || !_knownDtos.TryRemove(dto.DtoGuid, out var disposed) || sender != disposed) { return; } disposed.PropertyChanged -= _referencePropertyChanged; disposed.Disposed -= _reference_Disposed; Logger.Trace("Reference resolver - object {0} disposed, generation is {1}", disposed, GC.GetGeneration(dto)); }