1. 程式人生 > >WinForm WPF基於一個腳本引擎(ReoScript)的窗體設計器開發總結(一)

WinForm WPF基於一個腳本引擎(ReoScript)的窗體設計器開發總結(一)

圖片 就會 創建 value CI clr string 類 擴展 所有

0x00 ReoScript 腳本引擎

真的這個腳本引擎一點都不好用,開發時遇到問題,心中總有一萬個草泥馬飛過,好在二次開發對腳本運行原理也有了更多的理解,

這本身就是一個很好的學習經歷和過程。

下面大體介紹一下這個引擎和使用的方法。

ReoScript 是一個類JS的腳本引擎,但是可以與CLR 進行交互。

官方自帶有例子,我挑幾個重點講一下。

1. 引用CLR 空間,可以綁定部分控件事件

官方CLREvent demo

技術分享圖片

執行腳本後,點擊LinkLabel 後Click 事件被觸發,事件綁定這裏是個坑,後文會在開發設計器的時候會說到。

CLRTypeImporting 這裏也有坑。

技術分享圖片

這裏運行後,腳本創建了一個窗體,但是在腳本中並不能支持所有的界面控件和控件屬性,原因在於腳本引擎有自己的類型系統,和js 類似,

這是造成了無法與CLR 進行比較好的交互的原因,比如num類型內部實際上 是CLR 的double 類型,在一些要 使用 integer ,decimal 之類的時候就會出現問題,

比如在腳本中new 一個numbericupdown控件 的時候,你會發現無法正常設置 value 等屬性,很多控件無法正常使用,弊端更大的在與, 雖然能夠 引用的CLR 空間,

但是無法使用 那些比較重要的類型轉化方法,當然 腳本引擎自己也有提供類型轉換,但是不可能有 clr string 類型裏的方法好用,是吧,

同時,你無法通過 使用 var dec =new decimal(10); 來達到擴展的目的。

上面所講的的兩個坑,對於我們實際的項目 事實上是比較 嚴重的,我個人 實際上是推薦 使用 CSharpScript 的一些腳本引擎來做我們的項目 ,與CLR 的交互肯定會更好,

或者使用CSharp 的一些動態編譯來做這個項目可能會更好。但是考慮到老大是做java的,對 java 的類似技術棧肯定是比較推崇的,而且這家公司就我和老大在做.net ,

老大只是兼顧做一下,大部分在做java。基於種種原因,我只能硬著頭皮在接著做下去。

WinForm WPF基於一個腳本引擎(ReoScript)的窗體設計器開發總結(一)