WEB开发网
开发学院图形图像Flash DLR in Silverlight 阅读

DLR in Silverlight

 2008-10-11 11:41:40 来源:WEB开发网   
核心提示:DLR(Dynamic Language Runtime)是Silverlight中提供的一套非常强大的动态语言运行时,目前2.0 beta2中支持Python,DLR in Silverlight,Ruby和JSX,利用DLR,然后得到相应动态语言的运行引擎,ScriptRuntimeSetupsetup=newSc

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

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接