2016-07-18 13 views
1

私は、データベースから取得したユーザー定義の匿名のjavascript関数をASP.Netアプリケーションのコンテキストでサーバー側で実行する必要がある機能について取り組んでいます。Jintでサードパーティのjsライブラリを使用する

私はこの目的で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; " + 
       "}"; 

    } 

ありがとうございます。

答えて

0

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

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

    } 

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

関連する問題