Question

J'héberge IronPython 2.0 dans une application C # / Winforms. J'aimerais que Python puisse accéder à divers objets globaux et statiques dans l'application hôte.

Par exemple, l'application hôte a une classe statique interne "Global", qui contient un certain nombre de membres publics statiques, qui sont les différents objets globaux auxquels je souhaite accéder:

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

Je souhaite pouvoir faire référence à Global.Lighting.xxx en code Python, exactement comme dans l'application C #.

Existe-t-il un équivalent IronPythonic de 'InternalsVisibleTo' que je peux utiliser pour permettre au code Python de voir les types internes de l'application hôte? Ou dois-je les rendre publiques?

Était-ce utile?

La solution

D'accord, j'ai donc moi-même résolu ce problème, à l'aide de la spécification DLR, à partir d'ici https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf et en consultant la source IP / DLR.

Cela n'est pas très élégant et l'utilisation d'un objet ScriptRuntimeSetup avec la propriété PrivateBinding définie sur True serait probablement un itinéraire plus ordonné que l'utilisation de CreateEngine.

Mais celui-ci fonctionne:

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

_engine = Python.CreateEngine(options);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top