호스팅 된 Ironpython의 내부 객체에 어떻게 액세스합니까?
-
08-07-2019 - |
문제
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);
제휴하지 않습니다 StackOverflow