2

データベースから取得したユーザー定義の匿名の JavaScript 関数を、ASP.Net アプリケーションのコンテキストでサーバー側で実行する必要がある機能に取り組んでいます。

この目的のためにJintを評価しています(NuGetの最新バージョン)。以下のように、基本的な操作を実行して値を返す関数を問題なく実行できました。

    public void Do()
    {
        var jint = new Engine();
        var add = jint.Execute(@"var f = " + GetJsFunction()).GetValue("f");
        var value = add.Invoke(5, 4);
        Console.Write("Result: " + value);
    }

    private string GetJsFunction()
    {
        return "function (x,y) {" +
               "    return x+y;" +
               "}";
    }

私の質問は、Jint が lodash のようなサードパーティのライブラリを使用する JavaScript 関数の実行を容易にするかどうかです。もしそうなら、Jintエンジンにそれを認識させるにはどうすればよいですか(つまり、サードパーティのライブラリ)?

例として、次の関数の実行があります。

  private string GetFunction()
    {
        return "function (valueJson) { " +
               "   var value = JSON.parse(valueJson);" +
               "   var poi = _.find(value,{'Name' : 'Mike'});" +
               "   return poi; " +
               "}";

    }

よろしくお願いします。

4

1 に答える 1

1

私はこれを理解したと思います。カスタム関数を実行するのと同じです。ファイル (プロジェクト リソース) からサード パーティ ライブラリを読み取り、Jint エンジンで実行を呼び出すだけです。下記参照;

 private void ImportLibrary(Engine jint, string file)
    {
        const string prefix = "JintApp.Lib."; //Project location where libraries like lodash are located

        var assembly = Assembly.GetExecutingAssembly();
        var scriptPath = prefix + file; //file is the name of the library file
        using (var stream = assembly.GetManifestResourceStream(scriptPath))
        {
            if (stream != null)
            {
                using (var sr = new StreamReader(stream))
                {
                    var source = sr.ReadToEnd();
                    jint.Execute(source);
                }
            }
        }

    }

追加する必要があるすべてのサードパーティ ライブラリに対してこの関数を呼び出すことができます。

于 2016-07-18T09:14:55.580 に答える