DLR in Silverlight
2008-10-11 11:41:40 来源:WEB开发网DLR(Dynamic Language Runtime)是Silverlight中提供的一套非常强大的动态语言运行时。目前2.0 beta2中支持Python,Ruby和JSX。
利用DLR,你可以很方便的使用熟悉的动态语言编写Silverlight程序。
首先,我们需要初始化动态语言的环境配置,从中获取所有可以使用的动态语言列表,然后得到相应动态语言的运行引擎。
ScriptRuntimeSetupsetup=newScriptRuntimeSetup(true);//true表示载入所有支持的动态语言的环境配置
ScriptRuntimeruntime=ScriptRuntime.Create(setup);//创建动态语言运行环境
foreach(LanguageProviderSetuplangSetupinsetup.LanguageProviders)//遍历所有动态语言的环境配置
{
try
{
ScriptEngineengine=null;
if(runtime.TryGetEngine(langSetup.Names[0],outengine))//尝试获取动态语言的运行引擎
{
//engine就是我们需要的运行引擎
}
}
catch(MissingTypeException)//处理创建不支持的动态语言时可能抛出异常
{
}
}
获取了运行引擎后,我们就可以执行动态语言的代码了
publicclassMyErrorSink:ErrorSink//编译错误处理
{
IList<string>m_ErrorMsg=newList<string>();
publicIList<string>ErrorMsg
{
get{returnm_ErrorMsg;}
}
publicMyErrorSink()
{
}
publicvirtualvoidAdd(SourceUnitsource,stringmessage,SourceSpanspan,interrorCode,Severityseverity)
{
if(severity==Severity.Error||severity==Severity.FatalError)
{
m_ErrorMsg.Add(message);
}
}
}
LanguageContextlangContext=HostingHelpers.GetLanguageContext(engine);
SourceUnitsourceUnit=langContext.CreateSourceUnit(newSourceStringContentProvider("1/4+3"),null,SourceCodeKind.Expression);//创建代码序列:1/4+3
MyErrorSinkerrorSink=newMyErrorSink();
try
{
Scopescope=newScope();
objectret=sourceUnit.Execute(scope,errorSink);//执行动态语言代码,ret就是执行结果的返回值了
if(errorSink.ErrorMsg.Count>0)//检查编译错误
{
//
}
}
catch(Exception)
{
}
是不是很方便呢 :-)完整的DLR文档请参考http://compilerlab.members.winisp.net/dlr-spec-hosting.pdf(英文版)
Tags:DLR in Silverlight
编辑录入:爽爽 [复制链接] [打 印]- ››include指令与<jsp:include>动作的区别
- ››silverlight全屏显示图片
- ››Intent和IntentFilter详解
- ››Interface继承至System.Object?
- ››Silverlight MVVM 模式(一) 切近实战
- ››input按钮在IE浏览器的兼容
- ››Intent调用大全
- ››IntentService实现原理及内部代码
- ››Internet Explorer 无法打开
- ››Intel和Nokia宣称MeeGo将比Android更加开放且方便...
- ››innerText、outerText、innerHTML、outerHTML的区...
- ››Silverlight for Windows Phone 7开发系列(1):...
赞助商链接