• Javascript.NET(V8Wrapper) 更新,自定义映射别名


    历史版本

    之前的两篇文章分别介绍了Google的V8引擎,和开源的Javascript.NET(V8的.NET的Wrapper)。我在这两者的基础上进行了一个高层包装(Efreda.Script),并优化了部分代码,解决了原版Wrapper的一些异常,今天主要是对Efreda.Script进行了一些更新,以便更方便的在开发当中使用。

    自定义映射别名

    有使用了这个库的朋友向我反映,如果不加在全局程序集,则在JS当中实例化.NET类会相当的麻烦,例如要用到下面的代码。

    function testCreateByFullName()
    {
    	var proc=$.Create("System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",null);
    	proc.StartInfo.FileName="calc";
    	proc.Start();
    }

    每次都必须写一长串这样的名称,实在是降低了开发效率。

    如果在每次程序启动去加载全局程序集,问题也比较大,因为整个.NET的程序集相当多,这样的话,又费时间又费内存(大概需要5-10秒左右的时间来加载程序集,大大降低了程序的运行效率),虽然可以做一个启动画面来让用户等待,但是对于一些小程序来说,这样的做法未免太浪费资源了。

    之前恰好看到了一篇开源的.NET脚本引擎,对于在脚本当中实例化.NET的Class,它使用了别名的方式,于是,我也重新增加了这样的方式,可以通过代码来添加映射,也可以通过配置文件来添加,具体代码如下。

    通过配置文件:

     <configSections>
        <section name="Script" type="Efreda.Script.ScriptSection,Efreda.Script"/>
      </configSections>
    
      <!--脚本引擎配置-->
      <!--
        参数说明:
        StartEngine:是否启动脚本引擎
        
        RelativePath:是否为相对路径
        
        ScriptPath:脚本目录,根据RelativePath填写相对或绝对路径,相对路径只需要填写脚本目录名称即可
        
        CreateGACMapping:是否创建全局程序集映射,该操作耗时5-10秒,如果创建了映射,则可以简单的通过限定名称(命名空间+类名)在JS中实例化.NET类,而无需
        指定强名称
        
        CreateMappingAsyn:是否通过异步方式创建映射,以免阻塞主线程
      -->
      <Script StartEngine="True" RelativePath="True" ScriptPath="Scripts" CreateGACMapping="False" CreateMappingAsyn="False">
        <Map Alias="Process" Type="System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      </Script>

    通过代码:

    JScriptManager.AddMap("Math", "System.Math, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

    在JS脚本当中实例化:

    function testACreate()
    {
    	var proc=$.ACreate("Process",null);
    	proc.StartInfo.FileName="calc";
    	proc.Start();
    }
    
    function testAStaticMethod()
    {
    	var arg=new Array();
    	arg[0]=-25;
    	var rtv=$.AStaticMethod("Math","Abs",arg);
    	return rtv;
    }

    Efreda.Script 0.2.2源码下载

  • 相关阅读:
    python_面向对象——多态
    python_面向对象——封装
    python_面向对象——多继承
    python_面向对象——继承
    python_面向对象——对象间的组合关系
    python_面向对象——类之间的依赖关系
    python_面向对象——对象之间的关联关系
    python_异常处理
    python_反射:动态导入模块
    python_网络编程socketserver模块实现多用户通信
  • 原文地址:https://www.cnblogs.com/sweetwxh/p/2211284.html
Copyright © 2020-2023  润新知