Как получить доступ к внутренним объектам из размещенного IronPython?

StackOverflow https://stackoverflow.com/questions/291996

  •  08-07-2019
  •  | 
  •  

Вопрос

Я использую IronPython 2.0 в приложении C # / Winforms. Мне бы хотелось, чтобы Python имел доступ к различным глобальным статическим объектам в главном приложении.

В качестве примера, в хост-приложении есть внутренний статический класс 'Global', который содержит несколько статических открытых членов, которые представляют собой различные глобальные объекты, к которым я хотел бы получить доступ:

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

Я хочу иметь возможность ссылаться на Global.Lighting.xxx в коде Python, как и в приложении C #.

Существует ли IronPythonic-эквивалент InternalsVisibleTo, который я могу использовать, чтобы код Python мог видеть внутренние типы хост-приложения? Или мне нужно сделать их всех публичными?

Это было полезно?

Решение

Хорошо, я решил это сам, с помощью спецификации DLR, отсюда https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf и просмотрев источник IP / DLR.

Это не очень элегантно, и использование объекта ScriptRuntimeSetup со свойством PrivateBinding, установленным в значение True, вероятно, будет более точным путем, чем использование CreateEngine.

Но этот работает:

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

_engine = Python.CreateEngine(options);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top