سؤال

لدي مزود بيانات يحتوي على مجموعة من الكيانات. أريد فقط أن أكون قادرا على إنشاء كيان جديد من خلال مزود البيانات.

أي، لإنشاء سجل جديد أحتاج إلى استخدامه:

Entity entity = Provider.AddNew();
enity.set_Properties... etc

مشكلتي هي أنه إذا قمت بتعيين كياناتي على داخلي، فلن تتمكن من إنشاء مثيل لهم. يستخدم كل من موفري بيانات البيانات فئة أساسية ذات نوع عام من الكيان الذي تم تمريره.

لذلك في الوقت الحالي تحتوي طريقة AddNew () الخاصة بي:

public T AddNew()
{
  T added = Activator.CreateInstance<T>();
  this.Collection.Add(added);
  return added;
}

من الواضح أنه ليس نهاية العالم إذا استطعت إنشاء كيان جديد خارج مساحات أسماء مزود البيانات يدويا، ولكن يبدو أنه لا معنى له بالنظر إلى أنه لا توجد وسيلة لإنقاذهم من أي وقت مضى، فلماذا إعطاء الخيار للقيام بذلك؟

تحرير: نسيت أن أذكر أن جميع مقدميي، كيانات، إلخ في مساحة الاسم نفسها.

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

المحلول

لا تستخدم المنشط، الذي يعتمد على منشئ عام. بدلا من ذلك استخدام التفكير للعثور على منشئ المعلمات ثم اتصل به. شيء على طول هذه الخطوط:

Type t = typeof(MyType);
var parameterlessCtor = (from c in t.GetConstructors(
  BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
    where c.GetParameters().Length == 0
    select c).FirstOrDefault;
if(parameterlessCtor != null) instance = parameterlessCtor.Invoke(null);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top