مشاركة التجميعات باستخدام مكتبة الفئات المحمولة مع DataAnnotations
-
02-01-2020 - |
سؤال
لقد قمت بإنشاء مكتبة فئة محمولة تسمى DataContracts
الذي يحتوي على مشاريعي Messages
و Views
.الاشياء القياسية مثل GetStockItemByIDRequest
و StockView
الواردة فيه.
المشكلة تكمن عندما أحاول الإضافة DataAnnotations
باستخدام System.ComponentModel.DataAnnotations
لبعض من بلدي Views
كما.
[DataContract]
public class StockView
{
[Required]
[DataMember]
public Guid StockID { get; set; }
[Required]
[DataMember]
public string Name { get; set; }
}
يمكنني إضافة بنجاح System.ComponentModel.DataAnnotations
إلى مشروع Portable Class Library الخاص بي ويمكنني الرجوع إليه بنجاح في تطبيق Windows Phone 8 الخاص بي ويمكنني أيضًا إنشاء مثيل جديد لطريقة العرض الخاصة بي على هذا النحو StockView View = new StockView();
داخل تطبيق Windows Phone الخاص بي ولكن إذا حاولت استخدام أي منهما Newtonsoft.Json
أو System.Net.Http.HttpClient
عن طريق القيام بشيء مثل
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://myservice.com");
T result = await response.Content.ReadAsAsync<T>();
أو
T result = await Newtonsoft.Json.JsonConvert.DeserializeObjectAsync<T>("{}");
أي:حيث يتعلق الأمر بإلغاء التسلسل ...
أنا أواجه الخطأ Could not load file or assembly 'System.ComponentModel.DataAnnotations, Version=2.0.5.0'
.والذي أفترضه هو أنه لا يبدو ذلك System.ComponentModel.DataAnnotations
ويدعم في نظام التشغيل Windows Phone 8 (ولكن لماذا يمكنني إضافته كمرجع إلى PCL الخاص بي؟).
لذا فإن أسئلتي هي، لماذا لا يتم استدعاء هذا الخطأ عندما أقوم بإنشاء مثيل جديد لهذه الفئات مباشرة وثانيًا كيف يمكنني التغلب على هذا؟
المحلول 2
حسنًا، اتضح أن افتراضاتي الأصلية كانت خاطئة تمامًا.يمكنك بالتأكيد الرجوع إلى System.ComponentModel.DataAnnotations
مساحة الاسم من مشروع Windows Phone 8.
يتعلق الأمر بشكل أساسي بالرجوع إلى إصدار Silverlight من ملف dll الذي يمكن العثور عليه بشكل مضاد C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System.ComponentModel.DataAnnotations.dll
لمزيد من المعلومات حول كيفية إنشاء مكتبات فئة محمولة أقترح في اشارة الى هذه المادة .
نصائح أخرى
لسوء الحظ، DataAnnotations غير محمولة حاليًا.على الرغم من أن الأمر معقد بعض الشيء، إلا أنه يمكنك على الأرجح التغلب على ذلك عن طريق كتابة سمات DataAnnotation الخاصة بك في PCL، وإنشاء تجميع يحمل نفس الاسم لمشاريع .NET Framework التي تعيد توجيه السمات إلى الإصدارات "الحقيقية".يرى هذه الإجابة لمزيد من التفاصيل حول هذا.
يتم دعم التعليقات التوضيحية للبيانات في بعض ملفات تعريف PCL.
الملفات الشخصية المدعومة:
- صافي 4.0.3 وما فوق
- متجر ويندوز 8 وما فوق
- سيلفرلايت 4 وما فوق
والجدير بالذكر أن أحدث إصدار من Windows Phone غير مدعوم (8.1 في ذلك الوقت).
راجع جدول ميزات PCL الكامل في:http://msdn.microsoft.com/en-us/library/gg597391%28v=vs.110%29.aspx
1) لا تتضمن عملية إنشاء مثيل فئة جديد قراءة السمات المخصصة التي يتم تحميلها عن طريق الانعكاس.
2) ال System.ComponentModel.DataAnnotations حصريًا لـ ASP.NET
توفر مساحة اسم System.componentModel.Dataannotations فئات السمات المستخدمة لتحديد البيانات الوصفية لعناصر التحكم في بيانات ASP.NET MVC و ASP.NET.
النسخة المحمولة من System.ComponentModel.DataAnnotations تبدو غير مكتملة (على سبيل المثال لا يوجد MaxLengthAttribute).
توجد هذه المكتبة:
https://github.com/ryanhorath/PortableDataAnnotations:
Install-Package Portable.DataAnnotations
يحتاج PCL الخاص بك إلى استهداف Silverlight 8، وإلا فسوف تحصل على أخطاء متعددة في تعريف الفئة.