2011年9月25日 星期日

ASP.NET Evaluator

using System;
using System.CodeDom.Compiler;
using System.Reflection;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

///
/// Evaluator 的摘要描述
///

public class Evaluator
{
    public static object Eval(string statement)
    {
        return _evaluatorType.InvokeMember("Eval", BindingFlags.InvokeMethod, null, _evaluator, new object[] { statement });
    }

    static Evaluator()
    {
        CodeDomProvider provider = CodeDomProvider.CreateProvider("JScript");
        CompilerParameters parameters;
        parameters = new CompilerParameters();
        parameters.GenerateInMemory = true;

        CompilerResults results;
        results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);

        Assembly assembly = results.CompiledAssembly;
        _evaluatorType = assembly.GetType("Evaluator");
        _evaluator = Activator.CreateInstance(_evaluatorType);
    }

    private static readonly object _evaluator;
    private static readonly Type _evaluatorType;
    private static readonly string _jscriptSource = @"class Evaluator { public function Eval(expr : String) : String { return eval(expr); } }";
}

沒有留言:

張貼留言