문제

C#/Winforms 응용 프로그램에서 Ironpython 2.0을 호스팅하고 있습니다. Python이 호스트 애플리케이션의 다양한 글로벌 정적 객체에 액세스 할 수 있기를 바랍니다.

예를 들어, 호스트 애플리케이션에는 내부 정적 클래스 '글로벌'이 있으며, 여기에는 여러 정적 공개 멤버가 포함되어 있으며, 여기에는 내가 액세스하고 싶은 다양한 글로벌 객체입니다.

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

C# 응용 프로그램에서 가능한 것처럼 Python 코드에서 Global.lighting.xxx를 참조하고 싶습니다.

Python 코드가 호스트 응용 프로그램의 내부 유형을 볼 수 있도록 사용할 수있는 'InternalSvisibleto'와 동등한 Ironpythonic이 있습니까? 아니면 모두 공개해야합니까?

도움이 되었습니까?

해결책

좋아, 그래서 나는 여기에서 DLR 사양의 도움으로 이것을 스스로 해결했다. https://github.com/ironlanguages/dlr/blob/master/docs/dlr-spec-hosting.pdf 그리고 IP/DLR 소스를 살펴보면

이것은 매우 우아하지 않으며 PrivateBinding 속성 세트와 함께 ScriptruntimesSetup 객체를 사용하는 것은 아마도 CreateEengine을 사용하는 것보다 깔끔한 경로 일 것입니다.

그러나 이것은 작동합니다.

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

_engine = Python.CreateEngine(options);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top