昨日に続いて、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("拡張子");
<Languages> <Language languageContext="" assembly="" extensions="" /> </Languages>