Пример #1
0
        public static void DisposeWith(this IDisposable disposable, Object obj)
        {
            var instId = obj.GetInstanceId();

            if (!objectDisposables.ContainsKey(instId))
            {
                objectDisposables[instId] = new HashSet <IDisposable>();

                InstanceTracker.Of(obj).Freed += () =>
                {
                    foreach (var disposable in objectDisposables[instId])
                    {
                        // GD.Print($"disposed with {instId}");
                        disposable.Dispose();
                    }

                    objectDisposables.Remove(instId);
                };
            }

            objectDisposables[instId].Add(disposable);
        }