Silverlight开发工具是一个非常深奥的应用工具。其中包含有许多特性值得我们去深入的研究。要想很好的使用这款工具帮助我们完成各种功能的实现,就需要在实际编程中去慢慢积累经验。Silverlight DLR是Silverlight中提供的一套非常强大的动态语言运行时。目前2.0 beta2中支持Python,Ruby和JSX。#t#
利用Silverlight DLR,你可以很方便的使用熟悉的动态语言编写Silverlight程序。本文主要介绍如何在托管语言中调用动态语言。首先,我们需要初始化动态语言的环境配置,从中获取所有可以使用的动态语言列表,然后得到相应动态语言的运行引擎。
- ScriptRuntimeSetup setup = new Script
RuntimeSetup(true); - //true表示载入所有支持的动态语言的环境配置
- ScriptRuntime runtime = ScriptRuntime.
Create(setup); - //创建动态语言运行环境
- foreach (LanguageProviderSetup langSetup
in setup.LanguageProviders) - //遍历所有动态语言的环境配置
- {
- try
- {
- ScriptEngine engine = null;
- if (runtime.TryGetEngine(langSetup.
Names[0], out engine)) - //尝试获取动态语言的运行引擎
- {
- //engine就是我们需要的运行引擎
- }
- }
- catch (MissingTypeException)
- //处理创建不支持的动态语言时可能抛出异常
- {
- }
- }
Silverlight DLR获取了运行引擎后,我们就可以执行动态语言的代码了
- public class MyErrorSink : ErrorSink
//编译错误处理- {
- 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); //创建代码序列:1/4+3- MyErrorSink errorSink = new MyErrorSink();
- try
- {
- Scope scope = new Scope();
- object ret = sourceUnit.Execute(scope,
errorSink); //执行动态语言代码,
ret就是执行结果的返回值了- if (errorSink.ErrorMsg.Count > 0)
//检查编译错误- {
- //
- }
- }
- catch (Exception)
- {
- }
Silverlight DLR的简单应用就为大家介绍到这里。