Frage

Ich bin Hosting Ironpython 2.0 in einer C # / WinForms-Anwendung. Ich würde Python möge in der Lage sein, verschiedene globale, statische Objekte in der Host-Anwendung zugreifen zu können.

Als Beispiel die Host-Anwendung verfügt über eine interne statische Klasse ‚Global‘, die eine Reihe von statischen öffentlichen Elemente enthält, die sind, sind die verschiedenen globalen Objekte Ich mag würde zuzugreifen:

static class Global
{
  public static FeederSystem Feed ...
  public static LightingSystem Lighting ...
  public static IOSystem Io ...
  ... etc
}

Ich mag Global.Lighting.xxx in Python-Code beziehen zu können, wie ich kann in der C # Anwendung.

Gibt es einen IronPythonic äquivalent ‚InternalsVisibleTo‘, die ich verwenden kann, Python-Code zu ermöglichen, die internen Arten der Host-Anwendung zu sehen? Oder muss ich sie alle öffentlich machen?

War es hilfreich?

Lösung

Ok, so habe ich dies aus mich selbst, mit Hilfe der DLR-Spezifikation, von hier https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf und auf der IP / DLR Quelle suchen.

Das ist nicht sehr elegant, und mit einem ScriptRuntimeSetup Objekt mit der PrivateBinding Eigenschaft True festgelegt wäre wahrscheinlich ein sauberere Weg als Create verwendet wird.

Aber dieses arbeitet:

Dictionary<string, object> options = new Dictionary<string, object>();
options.Add("PrivateBinding", true);

_engine = Python.CreateEngine(options);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top