كيف يمكنني الوصول إلى الكائنات الداخلية من و IronPython استضافت؟

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

  •  08-07-2019
  •  | 
  •  

سؤال

وأنا استضافة و IronPython 2.0 في C # / WinForms عناصر تطبيق. أود بيثون لتكون قادرة على الوصول إلى مختلف الأجسام الساكنة العالمية في التطبيق المضيف.

وكمثال على ذلك، التطبيق المضيف لديه فئة ثابتة الداخلية "جلوبل"، الذي يتضمن عددا من أعضاء ثابت العام، والتي هي هي الكائنات المختلفة العالمية وأود أن الوصول:

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

وأريد أن أكون قادرة على الرجوع إلى Global.Lighting.xxx في التعليمات البرمجية بايثون، فقط ما أستطيع في # تطبيق C.

هل هناك ما يعادل IronPythonic من "InternalsVisibleTo" التي يمكنني استخدامها للسماح كود بايثون لرؤية أنواع الداخلية من التطبيق المضيف؟ أو هل أنا بحاجة لجعل كل منهم الجمهور؟

هل كانت مفيدة؟

المحلول

وطيب، لذلك عملت هذا من نفسي، مع المعونة من المواصفات DLR، من هنا <لأ href = "https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting قوات الدفاع الشعبي "يختلط =" نوفولو noreferrer "> https://github.com/IronLanguages/dlr/blob/master/Docs/dlr-spec-hosting.pdf و من خلال النظر في مصدر IP / DLR.

وهذه ليست أنيقة جدا، واستخدام كائن ScriptRuntimeSetup مع الخاصية PrivateBinding وضع صحيح ربما يكون طريقا أكثر إتقانا من استخدام CreateEngine.

ولكن يعمل هذا واحد:

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

_engine = Python.CreateEngine(options);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top