2016-07-20 64 views
0

我試圖從.NET類庫使用JSPool和JavaScriptEngineSwitcher.V8運行一些JavaScript,但我無法解決如何安裝JavaScriptEngineSwitcher.V8。到目前爲止我的代碼很簡單如何爲JavaScriptEngineSwitcher安裝引擎?

public class Renderer : IDisposable 
{ 
    private readonly JsPool _pool; 
    private static readonly string[] _requiredFiles = { "vendors", "app" }; 

    public Renderer(string jsPath) 
    { 
     _pool = new JsPool(new JsPoolConfig 
     { 
      Initializer = initEngine => 
      { 
       foreach (var file in _requiredFiles) 
       { 
        initEngine.ExecuteFile(jsPath + "\\" + file + ".js"); 
       } 
      } 
     }); 
    } 

    public string Render() 
    { 
     using (var engine = _pool.GetEngine()) 
     { 
      return engine.Evaluate<string>(@"myjsFn()"); 
     } 
    } 

    public void Dispose() 
    { 
     _pool.Dispose(); 
    } 
} 

但是,這將引發由於沒有發動機已註冊

NullReferenceException: Object reference not set to an instance of an object. 
JavaScriptEngineSwitcher.Core.JsEngineSwitcher.CreateDefaultJsEngineInstance() 

我的應用程序的目標是dnx451一個NullRefException,和我指定JSPool 0.4.1和JavaScriptEngineSwitcher.V8 1.5.8在我的依賴中。我有一個很好看,但似乎無法找到任何顯示註冊V8引擎所需的任何代碼。任何人都可以將我指向正確的方向嗎?

+0

不要再使用DNX。它現在沒有意義。說.NET Framework或.NET Core。 –

+0

僅供參考,請查看池的'GetEngine()'方法返回的對象的dispose方法。與你所期望的相反,IIRC,它*不會*將引擎返回到游泳池。你有一個獨立的方法在池中調用。 – Amy

+0

@Lex李我之所以說DNX是因爲該應用程序是使用RC1編寫的,我還沒有機會升級它! –

回答

2

此問題已在JavaScript Engine Switcher version 2.0.0JSPool version 2.0.0中解決。在安裝NuGet軟件包之前,我建議先閱讀文檔的「How to upgrade applications to version 2.X」部分。

但值得注意的是,JavaScriptEngineSwitcher.V8模塊只能用於由「ASP.NET核心Web應用程序(.NET Framework)」模板創建的Web應用程序。

+0

嗨。你知道JavaScriptEngineSwitcher的任何文檔/入門工具包嗎?他們的git hub wiki上的文檔非常差,我找不到任何入門工具包 –

+1

Ashkan Sirous,直到沒有其他文檔來源,但我會逐漸在GitHub上編寫文檔。這是因爲很長一段時間,[JavaScript引擎切換器](https://github.com/Taritsyn/JavaScriptEngineSwitcher)是[Bundle Transformer](http://bundletransformer.codeplex)的輔助庫。 COM /)。然後來到[React.NET](https://github.com/reactjs/React.NET),JavaScript引擎切換器開始普及。 –

+0

偉大的:)請也爲我分享鏈接。我真的需要它。 –