سؤال

لقد ورثت تطبيق ASP.NET قديمًا كبيرًا حيث أعمل، وتريد شركتنا أن نستخدم FxCop ونصلح جميع انتهاكات القواعد الرئيسية.القاعدة التي يبدو أنها سائدة حاليًا هي ما يلي:

CA1405:يجب أن تكون الأنواع الأساسية للنوع المرئي COM مرئية لـ COM

يبدو أن كل صفحة/عنصر تحكم ASP.NET في تطبيقنا ينتهك هذه القاعدة.لم أكن متأكدة من السبب في البداية، ولكن في النهاية أدركت أن ذلك يرجع إلى سلسلة الميراث التالية:

System.IDisposable
  → System.Web.UI.Control
    → System.Web.UI.TemplateControl
      → System.Web.UI.Page

أدركت أيضا IDisposable يعرف ب:

[ComVisible(true)]
public interface IDisposable
{
  void Dispose();
}

كي تختصر:كافة صفحات/عناصر تحكم ASP.NET ترث من IDisposable, ، و IDisposable لديه [ComVisible(true)] السمة، مما يعني أن جميع الصفحات/عناصر التحكم ستفشل في هذه القاعدة.

وهذا يضرنا لأن تطبيقنا يحتوي على آلاف الصفحات وعناصر التحكم، وبالتالي آلاف الانتهاكات.لا يعد تعطيل القاعدة خيارًا، حيث لدينا مجموعة "معيارية للشركة" من قواعد FxCop.يبدو أن FxCop تريد منا أن نتابع ونضع هذه السمة في كل صفحة في تطبيقنا، وهو ما لا أرغب حقًا في القيام به.

سؤالي هو لماذا IDisposable لديك [ComVisible(true)] صفة في المقام الأول؟

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

المحلول

تم وضع علامة IDisposable على أنها COMVisible للسماح بالتخلص من الموارد عند استخدام مكون .Net في تطبيق COM.

لقد استخدمنا هذا بالفعل بشكل كبير عند الانتقال من تطبيق VB6 إلى تطبيق .Net كامل:تمكنا من إعادة استخدام وظيفة .Net (الوصول إلى قاعدة البيانات) في تطبيق VB6 قديم، ولكن كان علينا استخدام واجهة IDispose لضمان تنظيف أشياء مثل اتصالات قاعدة البيانات بشكل صحيح عند الانتهاء من استخدام الكائن.

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