利用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 条评论
登录 后参与评论

相关文章

来自专栏更流畅、简洁的软件开发方式

使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]

最近项目里遇到了一个问题,为了解决这个问题“动用了”继承、多态还有工厂模式和反射,但是还是没有OO的感觉。呵呵。 先说一下具体情况: 1、使用短信猫来接收短...

2808
来自专栏个人随笔

C# 操作 access 数据库

private staticstring connStr = @"Provider= Microsoft.Ace.OLEDB.12.0;...

43113
来自专栏walterlv - 吕毅的博客

使用不安全代码将 Bitmap 位图转为 WPF 的 ImageSource 以获得高性能和持续小的内存占用

发布于 2017-11-09 15:25 更新于 2017-11...

542
来自专栏技术分享

.NET框架设计(常被忽视的框架设计技巧)

阅读目录: 1.开篇介绍 2.元数据缓存池模式(在运行时构造元数据缓存池) 2.1.元数据设计模式(抽象出对数据的描述数据) 2.2.借助Dynamic来改变...

2258
来自专栏小狼的世界

使用Python读取Mp3的标签信息

MP3是音频文件最流行的格式,它的全称是 MPEG layer III。但是这种格式不支持对于音频内容的描述信息,包括歌曲名称、演唱者、专辑等等。

1363
来自专栏张善友的专栏

Xamarin向iOS和Android引入C# Async支持

Xamarin引入支持iOS和Android异步开发的库,现在已经发布了一个预览版本。该库主要基于微软的.NET 4.5,而后者是作为Visual Studio...

1799
来自专栏草根专栏

设计模式学习(一):多用组合少用继承(C#)

《深入浅出设计模式》学习笔记第一章 原始需求和设计 事情是这样开始的,公司需要做一套程序,鸭子,设计如下: ? 一个鸭子父类,多个派生类,三个可override...

3564
来自专栏walterlv - 吕毅的博客

.NET 三个字母究竟应该如何大小写?前面的 “.” 什么时候能够去掉?(.NET Standard / dotnet-core / net472)

发布于 2018-05-28 08:23 更新于 2018-07...

791
来自专栏菩提树下的杨过

silverlight:telerik RadControls中RadGridView的一个Bug及解决办法

当RadGridView中嵌套RadComboBox,且RadGridView的高度不够出现滚动条时,上下拉动滚动条后,RadComboBox中的选中值将丢失!...

2017
来自专栏walterlv - 吕毅的博客

CaptureMouse/CaptureStylus 可能会失败

2017-10-09 11:05

641

扫码关注云+社区