Exemplo n.º 1
0
        protected override bool TryGetExtraValue(SymbolId key, out object value)
        {
            if (key == _viewSymbol)
            {
                value = _view;
                return(true);
            }

            var property = _viewType.GetProperty(key.ToString());

            if (property != null)
            {
                value = property.GetValue(_view, null);
                return(true);
            }

            var field = _viewType.GetField(key.ToString());

            if (field != null)
            {
                value = field.GetValue(_view);
                return(true);
            }

            if (_view.TryGetViewData(key.ToString(), out value))
            {
                return(true);
            }

            value = null;
            return(false);
        }
        protected override bool TryGetExtraValue(SymbolId key, out object value)
        {
            var property = _viewType.GetProperty(key.ToString());

            if (property != null)
            {
                value = property.GetValue(_view, null);
                return(true);
            }

            var field = _viewType.GetField(key.ToString());

            if (field != null)
            {
                value = field.GetValue(_view);
                return(true);
            }

            var method = _viewType.GetMethod(key.ToString());

            if (method != null)
            {
                var parameterTypes = method.GetParameters().Select(p => p.ParameterType).ToList();
                parameterTypes.Add(method.ReturnType);
                value = Delegate.CreateDelegate(
                    CompilerHelpers.MakeCallSiteDelegateType(parameterTypes.ToArray()),
                    _view,
                    key.ToString());
                return(true);
            }

            if (_view.TryGetViewData(key.ToString(), out value))
            {
                return(true);
            }

            value = null;
            return(false);
        }