.net core 嵌入 js(javascript)脚本引擎

漂亮的目录

  • 1、万能的脚本

  • 2、内部嵌入引擎方式

  • 3、调用NodeJs服务,与之通信方式

  • 结论

1、万能的脚本

折腾无止境,.net core 提供了更多的可能,今天我们就来看看脚本引擎。提起脚本,不得不说说Javascript——WEB互联网世界的一大半江山都掌控在其下,当今世界,发展最迅猛的必然输入前端技术,各种框架百花齐放,甚至于通过NodeJs,渗透到后端的地盘。Javascript无疑是最成功的语言,虽然开发这门语言只是一个人花了10天而已。
因此 .net core下加入一门脚本引擎,是不是首先考虑Javascript呢?

2、内部嵌入引擎方式

JavaScript Engine Switcher 使用同一的接口访问流行的Javascript引擎 (MSIE JavaScript Engine, Microsoft ClearScript.V8, Jurassic, Jint, ChakraCore and VroomJs). 该类库允许你在不同的引擎间快速的切换。

该包支持的类型如下:

  • JavaScriptEngineSwitcher.Core.Undefined

  • System.Boolean

  • System.Int32

  • System.Double

  • System.String
    支持包包含下列列表:

  1. JS Engine Switcher: Core (supports .NET Framework 4.0 Client, .NET Framework 4.5 and .NET Standard 1.3)

  2. JS Engine Switcher: MS Dependency Injection (supports .NET Framework 4.5 and .NET Standard 1.3)

  3. JS Engine Switcher: MSIE (supports .NET Framework 4.0 Client, .NET Framework 4.5 and .NET Standard 1.3)

  4. JS Engine Switcher: V8 (supports .NET Framework 4.0 Client and .NET Framework 4.5)

  • Windows (x86)

  • Windows (x64)

  • JS Engine Switcher: Jurassic (supports .NET Framework 4.0 Client and .NET Framework 4.5)

  • JS Engine Switcher: Jint (supports .NET Framework 4.0 Client, .NET Framework 4.5 and .NET Standard 1.3)

  • JS Engine Switcher: ChakraCore (supports .NET Framework 4.0 Client, .NET Framework 4.5 and .NET Standard 1.3)
    - Windows (x86)
    - Windows (x64)
    - Windows (ARM)
    - Linux (x64)
    - OS X (x64)

  • JS Engine Switcher: Vroom (supports .NET Framework 4.0 Client, .NET Framework 4.5 and .NET Standard 1.6)
    想在 .net core 下使用,有多重选择,那我们就选择 ChakraCore吧:

  • var engineSwitcher = JsEngineSwitcher.Current;
    engineSwitcher.EngineFactories.Add(new ChakraCoreJsEngineFactory());
    engineSwitcher.DefaultEngineName = ChakraCoreJsEngine.EngineName;IJsEngine engine = JsEngineSwitcher.Current.CreateDefaultEngine();engine.EmbedHostType("Test", typeof(Test));var t = new Test();engine.EmbedHostObject("TestA", t);engine.Execute("var a=1+3;if(1)a=5;TestA.Name=a");Console.WriteLine(t.Name);
    

    为了在javascript引擎和.net core间进行交互,我定义了一个类,ooop,普通的类

    public class Test
    {public string Name { get; set; }public void Hello(string s){Console.WriteLine(s);}
    }
    

    代码交互清爽而干净,执行也很快,你有没有被惊艳到?

    3、调用NodeJs服务,与之通信方式

    微软提供了一个nuget包:Microsoft.AspNetCore.NodeServices,通过该包,可以顺利的和nodejs服务进行通信。
    为了使用它,我引入了注入容器。
    这里通过脚本调用方式来执行js。

    var services = new ServiceCollection();
    services.AddNodeServices(options => {options.LaunchWithDebugging = false;                options.ProjectPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "js");});var serviceProvider = services.BuildServiceProvider();var nodeServices = serviceProvider.GetRequiredService<INodeServices>();for (int i = 0; i < 100; i++){var result = nodeServices.InvokeAsync<int>("./addNumbers", 1, 2).Result;}
    

    注意: 脚本默认放置在js目录下,命名为:addNumbers.js。
    js代码如下,我们可以通过callback返回结果。

    module.exports = function (callback, first, second) {var result = first + second;callback(/* error */ null, result);
    };
    

    该方式注入了一个单例的nodejs服务引擎,因此理论上看执行js的效率会高于第一种方式。

    结论

    通过脚本可以做很多灵活的需求,例如:自定义任务、自定义的规则、甚至流程。
    .net core 给我们提供了无尽可能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用一个小球揭开地球的面纱,探索地球运转的秘密!

一个人一旦对某事物有了浓厚的兴趣&#xff0c;就会主动去求知、去探索、去实践&#xff0c;并在求知、探索、实践中产生愉快的情绪和体验。所以&#xff0c;古今中外的教育家无不重视兴趣在智力开发中的作用。小木之前推荐过一款AR地球仪&#xff0c;它是一个互动性强、内容丰…

Eclipse C++的配置问题launch failed binary not found

首先下载eclipse c 我的是64bit版本 安装好MinGW&#xff0c;并配置好环境变量&#xff0c;参考我的博客 http://www.cnblogs.com/fickleness/p/3273044.html 配置eclipse 选executable,选mingw gcc .按make toolchain(s) preferred.ok 配置好关闭eclipse 然后 1、安装minGW先 …

张善友: .NET社区运营 | 2021 中国开发者生态峰会

内容来源&#xff1a;2021 年 6 月 5 日&#xff0c;由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满落幕。会上&#xff0c; .NET基金会成员、资深.NET顾问和解决方案专家张善友发表了主题为《 .NET社区运营》的演讲&#xff0c;以社区工程师的角度分享了 .NET社区发…

到底要不要拯救地球?真·逻辑鬼才!| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅真逻辑鬼才↓ ↓ ↓

从零实操基于WSL2 Docker部署Asp.Net Core项目

前言平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务&#xff0c;已经习惯了那一套成熟的操作流程&#xff0c;开发和部署确实快捷方便&#xff0c;但是还没在自己的电脑上进行操作过&#xff0c;特别是Windows10开始已经有WSL、WSL2去年在笔记本上捣鼓…

linux启动xorg进程,Linux 黑话解释:Xorg,X11,Wayland,什么是显示服务器

原标题&#xff1a;Linux 黑话解释&#xff1a;Xorg&#xff0c;X11&#xff0c;Wayland&#xff0c;什么是显示服务器您是否想知道X Server&#xff0c;Xorg&#xff0c;X11&#xff0c;Wayland以及诸如此类的东西到底是什么&#xff1f;Wayland vs Xorg&#xff0c;哪个更好&…

有气质的人都在看什么?

全世界只有3.14 % 的人关注了青少年数学之旅王小波说&#xff1a;我活在世上&#xff0c;无非想要明白些道理&#xff0c;遇见些有趣的事&#xff0c;倘能如我所愿&#xff0c;我的一生就算成功。你的圈子将决定你的人生。每一位对事物都有着独特的态度让你成为一个有趣的人。今…

投影变换[转]

4. 投影变换 一个投影变换类似于选择一个透镜的焦距&#xff0c;它是三种变换中最复杂的一个。 4.1 视锥&#xff08;Viewing Frustum&#xff09; 4.2 什么是投影变换? 4.3 设置投影矩阵 4.4 一个“W-Friendly”投影矩阵 4.1 视锥视锥就是场景中的一个三维空间&#xff0c;…

那些把天聊死的神操作。。| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】【10】【11】【12】&#xff08;图源网络&#xff0c;侵权删&#xff09;有话请“直”说↓ ↓ ↓

SqlDataReader对象的NextResult方法读取存储过程多个结果集

如上图&#xff0c;我这里有返回4个记录集,分别表示 发送的总数&#xff0c;成功数&#xff0c;失败数&#xff0c;以及所有的记录集&#xff0c;那么我怎么去获取呢&#xff1f; 如果我第二个记录集 第三个记录集 都是多行的话&#xff0c;怎么办&#xff1f;可以参考下面这张…

全部换新-微软复兴.NET,C#10 .NET6 VS2022各个强势!

VS2022.NET6C#10一起体验是啥感觉&#xff1f;爽&#xff01;令人印象深刻的是VS2022打开超大项目的流畅&#xff0c;.NET6极致简化的MiniAPI框架&#xff0c;C#10各种炫酷新语法。看看下图的代码你能认识吗&#xff1f;来自MiniAPI框架&#xff0c;直接在MapGet里面使用Lambda…

linux 修复图形界面,图形界面操作的备份和恢复Linux发行版

原标题&#xff1a;图形界面操作的备份和恢复Linux发行版来自&#xff1a;Linux迷链接&#xff1a;https://www.linuxmi.com/redo-rescue-2-0-6-linux.html现在可以下载Redo Rescue 2.0.6备份和恢复Linux发行版&#xff0c;该发行版增加了各种改进和新功能以及常见的错误修复。…

汇编语言的Hello World

汇编语言的Hello World&#xff0c;汇编语言没有我想象的那么低级&#xff0c;它已经具备了不少高级语言的特性&#xff0c;代码也变得清晰&#xff0c;层次清楚&#xff0c;易于维护了。a.asm.386.model flat,stdcall includelib kernel32.lib includelib user32.lib MessageB…

一条线一万美元的故事误导了你多少年

全世界只有3.14 % 的人关注了青少年数学之旅福特公司请斯坦门茨检修电机&#xff0c;画一道线用了一万美元&#xff0c;这个几乎人尽皆知的故事告诉我们一个道理&#xff1a;知识就是财富。故事讲到这里就结束了&#xff0c;但实际上&#xff0c;故事还有下文……20世纪初&…

ylbtech-Model-Account(通用账户模块设计)

ylbtech-DatabaseDesgin:ylbtech-Model-Account(通用账户模块设计)ylbtech-Model-Account(通用账户模块设计) 1.A&#xff0c;数据库关系图(Database Diagram)1.B&#xff0c;数据库设计脚本(Database Design Script)-- -- 用户模块设计 -- 2013-8-24 -- author:yuanbo -- US…

祝大家圣诞节快乐

同时庆祝 JWFD 20周年

刘敏:优麒麟开源操作系统运营实践 | DEV. Together 2021 中国开发者生态峰会

内容来源&#xff1a;2021 年 6 月 5 日&#xff0c;由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满落幕。会上&#xff0c;优麒麟开源社区运营负责人刘敏发表了主题为《优麒麟开源操作系统运营实践》的演讲&#xff0c;从市场的角度去讲解了一些其他板块的知识。分享…

拖延的本质是逃避!| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;扎心了↓ ↓ ↓

C# 无意间写了一段线程死锁的代码

源码如下&#xff1a;private void action_Click(object sender, RoutedEventArgs e){Task t new Task(() >{for (int i 0; i < 10; i){Thread.Sleep(1000);this.Dispatcher.Invoke(() >{lblStr.Content i.ToString();});manualResetEvent.Set();Console.WriteLine…

5G已来,你能做些什么?

5G大潮虽然已经来临&#xff0c;即便没有5G手机&#xff0c;小木还是要不甘示弱地测一下自己的网速&#xff0c;假装自己也是可以美美地在网上冲浪的&#xff01;小木的网速网友提供的5G测速多么痛的领悟&#xff0c;这差距还真的是很大&#xff01;说了这么多&#xff0c;你可…