كيف يمكنني إخفاء "المستوطنين" من جميع التجميع باستثناء مجموعة واحدة؟

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

سؤال

لقد أشرت إلى هذه القضية في سؤالي الآخر, ، لكنني أعتقد أنه من المفيد تقسيمها إلى سؤالها الخاص ، لأنها لا تعتمد حقًا على السيناريوهات الأخرى التي ذكرتها.

على أي حال - على Q ، لا أعرف ما إذا كان هذا ممكنًا. تبحث عن حل/حل.

لدي مكتبة صفية ، لا شيء سوى بوكو:

MyCompany.MyProject.Domain.POCO

هذا التجمع لديه poco مثل هذا:

public class Post
{
   public int PostId { get; set; }
   public int Name { get; set; }
      ...
}

الآن ، لدي مكتبة فئة أخرى ، وهي DAL/مستودعك ، وتستخدم إطار الكيان 4.0 للمثابرة:

MyCompany.MyProject.Repositories

تحتوي هذه المجموعة على إشارة إلى مشروع POCO ، حيث يحتاج إلى إجراء عمليات CRUD على كائنات POCO (Grab DB ، والمشروع في POCO ، والعودة ، وكذلك تعديل POCO).

الآن ، لدي أيضًا تطبيق الويب, ، التي لديها إشارة إلى كل من POCO وتجميع المستودع.

إذا فعلت هذا:

somePOCO.PostId = 10;

أحصل على sqlexception ، مثل بعد معرف هو حقل هوية في قاعدة البيانات ، وبالتالي لا ينبغي أن يكون مجموعة التضمين.

هل هناك طريقة أستطيع يخفي The Setter لهذه الخصائص الخاصة ، بحيث يمكن للمستودع فقط الوصول إلى Setter؟

لا أستطيع التفكير في طريقة للقيام بذلك باستخدام معدلات إمكانية الوصول العادية (حيث لا يناسب أي منها السيناريو) ، هل يمكنك أن تفكر في حل بديل؟

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

المحلول

يمكنك جعل Setter داخليًا ، وجعل الداخلية مرئية لتجميع المستودع

[assembly: InternalsVisibleTo("MyLibrary.Repositories")]
public class Post
{
   public int PostId { get; internal set; }
   public int Name { get; internal set; }
      ...
}

هذا يعني أن كل شيء يمكنه "الحصول على" هذه الخصائص ، ولكن فقط هذه التجميع ، والتجميع الذي يحتوي على المستودع ، يمكن "تعيين"

نصائح أخرى

ضع علامة على جميع المستقدين على أنهم داخليون ، ثم أضف سمة InternalsVisibleto إلى مجموعة Pocos الخاصة بك:

 [assembly: InternalsVisibleTo( "MyCompany.MyProject.Repositories" )]  

لوك شيفر هو إجابة جيدة. يفي بالمتطلبات التقنية للسؤال. لكنني أنصح الحذر ببساطة لأن هذا قد لا يعالج المشكلة في المستقبل.

لا تقترح على الهندسة ولكن ربما ترغب في التفكير في استخلاص ما تفعله مع هذه الأشياء التي لديها خاصية المعرف القابل للتسوية. قد يكون الأمر كافياً لإنشاء هذه "الرؤية" مع زخرفة السمة هذه ، لكنني أعتقد أنه نوع من الاختراق للمشكلة. قد يكون من الأنظف تغليف التفاعل بين هذه الكائنات بشيء آخر ، وبالتالي إزالة وصول Setter من الاستهلاك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top