يمكن لآلية حاقن الخاصية الخاصة بـ IronPython لـ ASP.NET أن تجعل بناء جملة بعض الأكواد بسيطًا (لمزيد من التفاصيل، يرجى الرجوع إلى مقالتي)، ولكن يبدو أن الدعم الافتراضي غير مكتمل بعد.
لقد قمت بفك ترجمة Microsoft.Web.IronPython.dll وأضفت دعم حقن الخاصية لـ RepeaterItem وSession (HttpSessionState).
يعد دعم RepeaterItem بسيطًا للغاية، لأنه يحتوي بالفعل على ControlAttributesInjector، لذا فقط قم بإضافة سطر من التعليمات البرمجية إلى المُنشئ الثابت لـ DynamicLanguageHttpModule.cs:
// عنصر التكرار.
Ops.RegisterAttributesInjectorForType(typeof(RepeaterItem), new ControlAttributesInjector(), false);
الجلسة ليست محظوظة جدًا، هذه الفئة تطبق ICollection، ولكنها لا تنفذ واجهة IDictionary. لذلك لا يمكنني استخدام DictionaryAttributesInjector بأي حال من الأحوال، لقد أضفت فئة SessionAttributesInjector بنفسي. الكود كالتالي:
باستخدام IronPython.Runtime؛
باستخدام النظام؛
باستخدام System.Collections؛
باستخدام System.Runtime.InteropServices؛
باستخدام System.Web.SessionState؛
باستخدام
مساحة الاسم Microsoft.Web.IronPython.AttributesInjectors {
// أضيفت بواسطة نيل تشين.
الطبقة الداخلية SessionAttributesInjector: IAttributesInjector {
قائمة IAttributesInjector.GetAttrNames(object obj) {
HttpSessionState session = obj as HttpSessionState;
قائمة القائمة = قائمة جديدة ()؛
foreach (مفتاح السلسلة في الجلسة. المفاتيح) {
list.Add(key);
}
قائمة العودة؛
}
bool IAttributesInjector.TryGetAttr(object obj, رمز رمز nameSymbol, قيمة الكائن الخارجي) {
HttpSessionState session = obj as HttpSessionState;
value = session[nameSymbol.GetString()];
عودة صحيحة؛
}
}
}
تم إرفاق ملف Microsoft.Web.IronPython.dll المعدل الخاص بي.
تجدر الإشارة إلى أن حاقن السمات مفيد فقط لعمليات الحصول، مثل
الاسم = اسم الجلسة على ما يرام،
ولكن الإعداد ليس كذلك:
Session.Name = 'some name' سيبلغ عن خطأ.
لا تزال بحاجة إلى استخدام بناء الجملة هذا:
الجلسة ["الاسم"] = "اسم ما"