2016-07-20 66 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

伟大的:)请也为我分享链接。我真的需要它。 –