Pregunta

Estoy alojando IronPython 2.0 en una aplicación C # / Winforms. Me gustaría que Python pueda acceder a varios objetos globales y estáticos en la aplicación host.

Como ejemplo, la aplicación host tiene una clase estática interna 'Global', que contiene varios miembros públicos estáticos, que son los diversos objetos globales a los que me gustaría acceder:

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

Quiero poder hacer referencia a Global.Lighting.xxx en el código de Python, tal como puedo en la aplicación C #.

¿Existe un equivalente IronPythonic de 'InternalsVisibleTo' que pueda usar para permitir que el código Python vea los tipos internos de la aplicación host? ¿O necesito hacerlos públicos?

¿Fue útil?

Solución

Ok, así que lo resolví yo mismo, con la ayuda de la especificación DLR, desde aquí https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf y mirando la fuente IP / DLR.

Esto no es muy elegante, y usar un objeto ScriptRuntimeSetup con la propiedad PrivateBinding establecida True probablemente sería una ruta más ordenada que usar CreateEngine.

Pero este funciona:

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

_engine = Python.CreateEngine(options);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top