Silverlight DLR轻松实现动态语言编写
创始人
2024-06-19 07:00:18
0

Silverlight开发工具是一个非常深奥的应用工具。其中包含有许多特性值得我们去深入的研究。要想很好的使用这款工具帮助我们完成各种功能的实现,就需要在实际编程中去慢慢积累经验。Silverlight DLR是Silverlight中提供的一套非常强大的动态语言运行时。目前2.0 beta2中支持Python,Ruby和JSX。#t#

利用Silverlight DLR,你可以很方便的使用熟悉的动态语言编写Silverlight程序。本文主要介绍如何在托管语言中调用动态语言。首先,我们需要初始化动态语言的环境配置,从中获取所有可以使用的动态语言列表,然后得到相应动态语言的运行引擎。

  1. ScriptRuntimeSetup setup = new Script
    RuntimeSetup(true);
  2.  //true表示载入所有支持的动态语言的环境配置  
  3. ScriptRuntime runtime = ScriptRuntime.
    Create(setup);
  4.  //创建动态语言运行环境  
  5. foreach (LanguageProviderSetup langSetup
     in setup.LanguageProviders) 
  6. //遍历所有动态语言的环境配置  
  7. {  
  8. try  
  9. {  
  10. ScriptEngine engine = null;  
  11. if (runtime.TryGetEngine(langSetup.
    Names[0], out engine)) 
  12. //尝试获取动态语言的运行引擎  
  13. {  
  14. //engine就是我们需要的运行引擎  
  15. }  
  16. }  
  17. catch (MissingTypeException) 
  18. //处理创建不支持的动态语言时可能抛出异常  
  19. {  
  20. }  

Silverlight DLR获取了运行引擎后,我们就可以执行动态语言的代码了

 

  1. public class MyErrorSink : ErrorSink
     //编译错误处理  
  2. {  
  3. IList m_ErrorMsg = new List
    ();  
  4. public IList ErrorMsg  
  5. {  
  6. get { return m_ErrorMsg; }  
  7. }  
  8. public MyErrorSink()  
  9. {  
  10. }  
  11. public virtual void Add(SourceUnit 
    source, string message, SourceSpan 
    span, int errorCode, Severity severity)  
  12. {  
  13. if (severity == Severity.Error || 
    severity == Severity.FatalError)  
  14. {  
  15. m_ErrorMsg.Add(message);  
  16. }  
  17. }  
  18. }  
  19. LanguageContext langContext =
    HostingHelpers.GetLanguageContext(engine);  
  20. SourceUnit sourceUnit = langContext.
    CreateSourceUnit(new SourceStringContent
    Provider("1/4+3"), null, SourceCodeKind
    .Expression); //创建代码序列:1/4+3  
  21. MyErrorSink errorSink = new MyErrorSink();  
  22. try  
  23. {  
  24. Scope scope = new Scope();  
  25. object ret = sourceUnit.Execute(scope, 
    errorSink); //执行动态语言代码,
    ret就是执行结果的返回值了  
  26.  
  27. if (errorSink.ErrorMsg.Count > 0) 
    //检查编译错误  
  28. {  
  29. //  
  30. }  
  31. }  
  32. catch (Exception)  
  33. {  

Silverlight DLR的简单应用就为大家介绍到这里。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...