Domanda

Sto ospitando IronPython 2.0 in un'applicazione C # / Winforms. Vorrei che Python fosse in grado di accedere a vari oggetti statici globali nell'applicazione host.

Ad esempio, l'applicazione host ha una classe statica interna "Global", che contiene un numero di membri pubblici statici, che sono i vari oggetti globali a cui vorrei accedere:

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

Voglio poter fare riferimento a Global.Lighting.xxx nel codice Python, proprio come posso nell'applicazione C #.

Esiste un equivalente IronPythonic di 'InternalsVisibleTo' che posso usare per consentire al codice Python di vedere i tipi interni dell'applicazione host? O devo renderli tutti pubblici?

È stato utile?

Soluzione

Ok, quindi l'ho risolto da solo, con l'aiuto della specifica DLR, da qui https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf e guardando l'origine IP / DLR.

Questo non è molto elegante e l'utilizzo di un oggetto ScriptRuntimeSetup con la proprietà PrivateBinding impostata su True sarebbe probabilmente una route più ordinata rispetto all'utilizzo di CreateEngine.

Ma questo funziona:

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

_engine = Python.CreateEngine(options);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top