Welcome to MSDN Blogs Sign in | Join | Help
DLR ベータ1を使ったホスティング

昨日に続いて、IronPython 2.0ベータ1を使ったホスティング(埋め込み)方法を説明します。以下にコードを示します。

// ScriptDomainManagerやScriptEnvironmentから変更
ScriptRuntime runtime = 
        ScriptRuntime.Create(new ScriptRuntimeSetup(true));
ScriptScope scope = runtime.CreateScope();
ScriptEngine engine = runtime.GetEngineByFileExtension("py");
//SourceUnitから変更に
ScriptSource ss = engine.CreateScriptSourceFromString(
             "import datetime",SourceCodeKind.SingleStatement);
object ret = ss.Execute(scope); 


昨日のサンプルでもありましたが、基本的にScriptRuntimeを使用するようになっています。ScriptRuntimeのCreateメソッドにScriptRuntimeSetupクラスのインスタンスを指定していますが、これは指定してなくても問題はありません。指定している理由は、後でご説明します。
 そしてGetEngineByFileExtensionメソッドでIronPythonのScriptEngineを取得しています。次に、CreateScriptSourceFromStringメソッドが返すのがSourceUnitからScriptSourceに変更になっています。最後に実行するExecuteメソッドが、ScriptEngineから削除されているため、ScriptSourceのExecuteメソッドを使用しています。もしくはCompilerメソッドでComileCodeを取得してExecuteメソッドで実行することもできます。

 次にご説明するのは独自の言語を作成した場合の、拡張子の登録方法です。

ScriptRuntimeSetup env = new ScriptRuntimeSetup(true);
List<LanguageProviderSetup> langs = 
                    new List<LanguageProviderSetup>();
langs.Add(new LanguageProviderSetup("LanguageContext",
                    "アセンブリ", "拡張子"));
env.LanguageProviders = ArrayUtil.AppendRage(
                    env.LanguageProviders, langs);
ScriptRuntime runtime = ScriptRuntime.Create(env);
ScriptEngine engine = runtime.GetEngineByFileExtension("拡張子");

このようにします。つまり、ScriptRuntimeSetupクラスのLanguageProvidersプロパティへ独自言語の情報を定義したLanguageProviderSetupのインスタンスを追加するのです。この時に使用しているArrayUtilクラスは、Microsoft.Scripting.Utilネームスペースで定義されています。

最後にSilverlight2.0で独自のスクリプト言語を追加するには、languages.configというXMLファイルを定義することのようです。このファイルの構造は、以下のようになっています。
<Languages>
  <Language languageContext="" 
         assembly="" extensions="" />
</Languages>

この構造のサンプルは、chiron.exe.configに記述されています。
Posted: Friday, April 18, 2008 3:02 PM by shozoa
Filed under: , , ,

Comments

No Comments

Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker