利用IronJs在.NET程序里面跑javascript脚本

what’s dlr

The dynamic language runtime (DLR) is a runtime environment that adds a set of services for dynamic languages to the common language runtime (CLR). The DLR makes it easier to develop dynamic languages to run on the .NET Framework and to add dynamic features to statically typed languages.

Dynamic languages can identify the type of an object at run time, whereas in statically typed languages such as C# and Visual Basic (when you use Option Explicit On) you must specify object types at design time. Examples of dynamic languages are Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra, and Groovy.

这么一堆洋文摆着,也懒的翻译了。说直接一点就是DLR使得.NET有了可以执行脚本语言的能力(也许描述的不太精准,不过你可以这么理解)。

why use IronJs

基于DLR微软自己开了两套类库来跑python跟ruby。不过我想javascript的通用性更强,做程序员的,不过100%也得有90%写过javascript吧。

what problem can be solved

那么这种能力有什么好处呢。我能想到的就是对于系统中一些经常需要变更的逻辑,比如折扣算法,积分,以及各种规则,我们可以提到脚本里去写。这样不用任何编译,ctrl+s一下就可以解决问题了。

this is demo:

code:

            var jsContext = new IronJS.Hosting.CSharp.Context();
            jsContext.ExecuteFile("myDlr.js");
            var fun = jsContext.GetFunctionAs<Func<double, double, double>>("cacl");
            double a = Double.Parse(this.tbxA.Text);
            double b = Double.Parse(this.tbxB.Text);
            var result = fun.Invoke(a,b);
            this.tbxResult.Text = result.ToString();

js:

            var cacl = function (a, b) {
            return a*b;
           };

当我修改a*b为a-b的时候结果直接就变成-10了。不用关闭程序,不用编译程序,爽。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沈唁志

整合ThinkPHP功能系列之微信公众号模板消息发送

所有服务号都可以在功能、添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限

722
来自专栏数据和云

Oracle 12.2新特性掌上手册 - 第三卷 Sharding 的增强

编辑手记:Sharding技术我们谈了好久,想必大家并不陌生,该功能12.2最新版本中,也将变得越来越完善,今天我们一起来学习。 注:文章内容来自官方文档翻译。...

2083
来自专栏非著名程序员

基于开源项目搭建属于自己的技术堆栈

? 在技术面试的时候肯定都会问到使用了哪些第三方框架,为什么使用它而不用其他的。身边朋友就有这样的亲身经历: 面试官:你们项目中加载图片都是用的什么框架? 面...

2307

Cassandra的数据布局 - 调试SSTables

当您事先知道数据的格式并且可以基于过往的经验做决策时,使用Apache Cassandra处理大规模的该类型的数据是非常容易的。

2710
来自专栏Hadoop实操

CDH网络要求(Lenovo参考架构)

数据网络是用于数据访问的节点之间的私有集群数据互连,比如在集群内的节点之间移动数据,或者将数据导入到CDH集群。CDH集群通常会连接到企业内部的数据网络。

48313
来自专栏张善友的专栏

更新Silverlight ctp到Silverlight beta 1.0

下面是我更新Silverlight ctp到Silverlight beta 1.0的一个纪录,希望对各位同学有帮助。 1、卸载Silverlight ctp ...

1699
来自专栏phodal

哪个才是最适合你的 Web UI 自动化测试框架

最近,项目上出于系统性稳定性、减少测试工作量考虑,打算在 Web 前端引入 BDD。由于上一个项目写了一定的 Cucumber 代码(BDD 测试框架之一),这...

4777
来自专栏cloudskyme

跟我一起云计算(3)——hbase

hbase HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存...

3415
来自专栏贾老师の博客

谈谈分布一致性协议

1063
来自专栏解Bug之路

解Bug之路-Druid的Bug 原

笔者很热衷于解决Bug,同时比较擅长(网络/协议)部分,所以经常被唤去解决一些网络IO方面的Bug。现在就挑一个案例出来,写出分析思路,以飨读者,希望读者在以后...

1015

扫码关注云+社区