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);
}