Asgard.ScriptSystem.Javascript.Modules.AsgardModule.GetProperty C# (CSharp) Method

GetProperty() protected method

protected GetProperty ( JSValue key, bool forWrite, PropertyScope propertyScope ) : JSValue
key JSValue
forWrite bool
propertyScope PropertyScope
return JSValue
        protected override JSValue GetProperty(JSValue key, bool forWrite, PropertyScope propertyScope)
        {
            if (key.ToString() == "getSystem")
            {
                var f = new Func<string, ISystem>(s => getSystem(s));
                return Marshal(f);
            }

            var methodInfo = _instance.GetType().GetMethod(key.ToString(), BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
            if (methodInfo != null)
            {
                var del = methodInfo.CreateDelegate(Expression.GetDelegateType(

                        (from parameter in methodInfo.GetParameters() select parameter.ParameterType)
                        .Concat(new[] { methodInfo.ReturnType })
                        .ToArray()), _instance);

                return Marshal(del);
            }

            methodInfo = _instance.GetType().GetMethod(key.ToString(), BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
            if (methodInfo != null)
            {
                var del = methodInfo.CreateDelegate(Expression.GetDelegateType(

                        (from parameter in methodInfo.GetParameters() select parameter.ParameterType)
                        .Concat(new[] { methodInfo.ReturnType })
                        .ToArray()));

                return Marshal(del);
            }

            return base.GetProperty(key, forWrite, propertyScope);
        }