Как получить доступ к внутренним объектам из размещенного IronPython? - PullRequest
1 голос
/ 15 ноября 2008

Я использую 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 мог видеть внутренние типы хост-приложения? Или мне нужно сделать их всех публичными?

1 Ответ

2 голосов
/ 15 ноября 2008

Хорошо, поэтому я решил это сам, с помощью спецификации 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);
...