- PERF Fix for codeplex bug 16713: don't use dynamic keywork to invoke DLR object methods

--HG--
branch : perf
This commit is contained in:
Suha Can
2010-11-03 14:17:27 -07:00
parent f690c17be8
commit d7963003aa

View File

@@ -14,23 +14,21 @@ namespace Orchard.Widgets.RuleEngine {
} }
public bool Matches(string expression) { public bool Matches(string expression) {
_scriptingManager.SetVariable("callbacks", new CallbackApi(this));
dynamic execContext = _scriptingManager.ExecuteExpression(@" dynamic execContext = _scriptingManager.ExecuteExpression(@"
class ExecContext class ExecContext
def initialize(callbacks) def execute(callbacks, text)
@callbacks = callbacks; @callbacks = callbacks;
end temp = instance_eval(text.to_s);
@callbacks = 0;
def execute(text) return temp;
instance_eval(text.to_s);
end end
def method_missing(name, *args, &block) def method_missing(name, *args, &block)
@callbacks.send(name, args, &block); @callbacks.send(name, args, &block);
end end
end end
ExecContext.new(callbacks)"); ExecContext.new()");
return execContext.execute(expression); return execContext.execute(new CallbackApi(this), expression);
} }
public class CallbackApi { public class CallbackApi {