ホストされたIronPythonから内部オブジェクトにアクセスするにはどうすればよいですか?
-
08-07-2019 - |
質問
C#/ WinformsアプリケーションでIronPython 2.0をホストしています。 Pythonがホストアプリケーションのさまざまなグローバルな静的オブジェクトにアクセスできるようにしたいと思います。
例として、ホストアプリケーションには内部の静的クラス 'Global'があります。これには、アクセスしたいさまざまなグローバルオブジェクトであるいくつかの静的パブリックメンバーが含まれています。
static class Global
{
public static FeederSystem Feed ...
public static LightingSystem Lighting ...
public static IOSystem Io ...
... etc
}
C#アプリケーションでできるように、PythonコードでGlobal.Lighting.xxxを参照できるようにします。
「InternalsVisibleTo」に相当するIronPythonicがあり、これを使用してPythonコードがホストアプリケーションの内部タイプを確認できるようにしますか?または、それらをすべて公開する必要がありますか?
解決
了解、DLR仕様の助けを借りて、ここから https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf およびIP / DLRソースを確認します。
これはあまりエレガントではなく、PrivateBindingプロパティをTrueに設定してScriptRuntimeSetupオブジェクトを使用すると、おそらくCreateEngineを使用するよりも整然としたルートになります。
しかしこれは動作します:
Dictionary<string, object> options = new Dictionary<string, object>();
options.Add("PrivateBinding", true);
_engine = Python.CreateEngine(options);
所属していません StackOverflow