Silverlight DLR輕松實(shí)現(xiàn)動(dòng)態(tài)語言編寫
Silverlight開發(fā)工具是一個(gè)非常深?yuàn)W的應(yīng)用工具。其中包含有許多特性值得我們?nèi)ド钊氲难芯?。要想很好的使用這款工具幫助我們完成各種功能的實(shí)現(xiàn),就需要在實(shí)際編程中去慢慢積累經(jīng)驗(yàn)。Silverlight DLR是Silverlight中提供的一套非常強(qiáng)大的動(dòng)態(tài)語言運(yùn)行時(shí)。目前2.0 beta2中支持Python,Ruby和JSX。#t#
利用Silverlight DLR,你可以很方便的使用熟悉的動(dòng)態(tài)語言編寫Silverlight程序。本文主要介紹如何在托管語言中調(diào)用動(dòng)態(tài)語言。首先,我們需要初始化動(dòng)態(tài)語言的環(huán)境配置,從中獲取所有可以使用的動(dòng)態(tài)語言列表,然后得到相應(yīng)動(dòng)態(tài)語言的運(yùn)行引擎。
- ScriptRuntimeSetup setup = new Script
RuntimeSetup(true); - //true表示載入所有支持的動(dòng)態(tài)語言的環(huán)境配置
- ScriptRuntime runtime = ScriptRuntime.
Create(setup); - //創(chuàng)建動(dòng)態(tài)語言運(yùn)行環(huán)境
- foreach (LanguageProviderSetup langSetup
in setup.LanguageProviders) - //遍歷所有動(dòng)態(tài)語言的環(huán)境配置
- {
- try
- {
- ScriptEngine engine = null;
- if (runtime.TryGetEngine(langSetup.
Names[0], out engine)) - //嘗試獲取動(dòng)態(tài)語言的運(yùn)行引擎
- {
- //engine就是我們需要的運(yùn)行引擎
- }
- }
- catch (MissingTypeException)
- //處理創(chuàng)建不支持的動(dòng)態(tài)語言時(shí)可能拋出異常
- {
- }
- }
Silverlight DLR獲取了運(yùn)行引擎后,我們就可以執(zhí)行動(dòng)態(tài)語言的代碼了
- public class MyErrorSink : ErrorSink
//編譯錯(cuò)誤處理- {
- IList<string> m_ErrorMsg = new List
<string>();- public IList<string> ErrorMsg
- {
- get { return m_ErrorMsg; }
- }
- public MyErrorSink()
- {
- }
- public virtual void Add(SourceUnit
source, string message, SourceSpan
span, int errorCode, Severity severity)- {
- if (severity == Severity.Error ||
severity == Severity.FatalError)- {
- m_ErrorMsg.Add(message);
- }
- }
- }
- LanguageContext langContext =
HostingHelpers.GetLanguageContext(engine);- SourceUnit sourceUnit = langContext.
CreateSourceUnit(new SourceStringContent
Provider("1/4+3"), null, SourceCodeKind
.Expression); //創(chuàng)建代碼序列:1/4+3- MyErrorSink errorSink = new MyErrorSink();
- try
- {
- Scope scope = new Scope();
- object ret = sourceUnit.Execute(scope,
errorSink); //執(zhí)行動(dòng)態(tài)語言代碼,
ret就是執(zhí)行結(jié)果的返回值了- if (errorSink.ErrorMsg.Count > 0)
//檢查編譯錯(cuò)誤- {
- //
- }
- }
- catch (Exception)
- {
- }
Silverlight DLR的簡(jiǎn)單應(yīng)用就為大家介紹到這里。