Ejemplo n.º 1
0
        public object this[string name] {
            get {
                if (_SpecialGetters.TryGetValue(name, out Func <TTarget, object> cb) ||
                    Getters.TryGetValue(name, out cb))
                {
                    return(cb(Weak?.SafeGetTarget() as TTarget));
                }

                if (Data.TryGetValue(name, out object value))
                {
                    return(value);
                }

                return(null);
            }
            set {
                if (_SpecialSetters.TryGetValue(name, out Action <TTarget, object> cb) ||
                    Setters.TryGetValue(name, out cb))
                {
                    cb(Weak?.SafeGetTarget() as TTarget, value);
                    return;
                }

                object prev;
                if (_Data.Disposable.Contains(name) && (prev = this[name]) != null && prev is IDisposable prevDisposable)
                {
                    prevDisposable.Dispose();
                }
                Data[name] = value;
            }
        }