Ejemplo n.º 1
0
        /// <inheritdoc cref="IResourceManager.FreezeResourceable{T}"/>
        public void FreezeResourceable <T>(IResourceable <T> resourceable) where T : IKeyed, INameable
        {
            if (resourceable.IsFrozen)
            {
                throw new ArgumentException("This message is only to be called by IResourceable");
            }
            if (!_resourceHooks.TryGetValue(resourceable, out var hooksObj))
            {
                return;
            }
            var hooks = (ResourceHook <T>)hooksObj;
            var e     = resourceable.GetResourceables();

            foreach (var item in e)
            {
                hooks(item);
            }
        }
Ejemplo n.º 2
0
        public void AddHook <T>(IResourceable <T> resourceable, ResourceHook <T> hook) where T : IKeyed, INameable
        {
            if (resourceable.IsFrozen)
            {
                var e = resourceable.GetResourceables();
                foreach (var item in e)
                {
                    hook(item);
                }
            }
            ResourceHook <T> hooks;

            if (_resourceHooks.TryGetValue(resourceable, out var hooksObj))
            {
                hooks  = (ResourceHook <T>)hooksObj;
                hooks += hook;
            }
            else
            {
                hooks = hook;
            }
            _resourceHooks[resourceable] = hooks;
        }