سؤال

أنا في معضلة كبيرة .. أنا أعمل على تطبيق ويب وحدات للغاية في ASP.NET MVC 2 (في الواقع ، سيكون Core خفيفة الوزن للغاية ، جميعها تعمل على الوحدات/الإضافات). لقد وجدت MEF مفيدًا جدًا لاكتشاف الوحدات ، لكنني لا أريدنا ذلك كحاوية IOC. هناك فرصة جيدة للغاية لأنني سأحتاج إلى ميزات متقدمة لـ "True" IOC Container ، لذلك أود استخدام الوحدة.

وهنا المشكلة: كيفية السماح للوحدات النمطية بتكوين الحاوية (برمجيًا) = تسجيل أنواعها الخاصة (وحدات تحكم MVC ، والتطبيقات المخصصة للخدمات ...) عند بدء التطبيق دون إجراء اعتماد صعب على الوحدة في جميع الوحدات النمطية؟ أعرف عن مشروع محدد موقع الخدمة الشائع ، ويبدو أنه جيد جدًا ، لكن حاوية CO الواجهة هذه تتيح فقط حل الأنواع ، وليس تسجيلها (AFAIK).

آمل حقًا أن تتمكن من فهم وجهة نظري ، أعرف أن لغتي الإنجليزية فظيعة (أنا من بلد غير اللغة الإنجليزية :) شكرًا جزيلاً!

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

المحلول

يمكنني بالتأكيد التعاطف مع عدم الرغبة في استخدام MEF كحاوية DI ، لكنني أعتقد أنه لا يزال يتعين عليك التفكير فيما إذا كان ذلك قد لا يكون قابلاً للتطبيق على الإضافات الإضافية الخاصة بك.

أنت طلب بالفعل الوظائف الإضافية الخاصة بك لاستخدام MEF, ، لذلك سيكون لديهم جميع الاعتماد الصعب على ذلك. على الرغم من أنني شخصياً لا أحب النهج القائم على السمات الذي يستخدمه MEF ، إلا أنه يبدو أنك تسأل كيف يمكن لكل وظيفة إضافية تسجيل نفسها مع حاوية DI. هذا يبدو أيضًا وكأنه تردش متشدد بالنسبة لي ، لذلك قد تستخدم MEF على طول الطريق.

تطبيق سمات MEF هو تسجيل المكون.

إذا كنت لا ترغب حقًا في استخدام MEF ، فلديك فقط بعض الخيارات الأخرى (لا شيء منها أكثر جاذبية):

  • تتطلب جميع الوظائف الإضافية لاتخاذ الاعتماد الصعب على الوحدة. أنا أفهم تمامًا سبب عدم رغبتك في القيام بذلك ، لكنني فقط أدرج هذا الخيار من أجل الاكتمال
  • تتطلب جميع الوظائف الإضافية لاتخاذ الاعتماد الصعب على محدد موقع الخدمة الشائعة. في رأيي ، هذا يحول المشكلة فقط قليلاً.
  • حدد واجهة التسجيل الإضافية الخاصة بك أن جميع الوظائف الإضافية يجب أن تنفذ. يمكنك بعد ذلك كتابة تطبيقك الخاص الذي يستخدم الوحدة ، بحيث تسجل جميع الوظائف الإضافية أنفسهم مقابل هذه الواجهة ، ولكن بعد ذلك ، ستكون تكرار ميزات MEF بشكل أو بآخر.
  • اكتب جميع الوظائف الإضافية في أ ديني ، ولكن الحاويات الغازية نمط. هذا يترك المشكلة في تكوين حاوية DI ، وسيتعين عليك بعد ذلك اللجوء إلى تكوين XML لذلك. هذا جدا هش النهج ويمكن أن يؤدي بسرعة إلى صيانة الجحيم, ، لذلك مرة أخرى أنا فقط أدرج هذا الخيار من أجل الاكتمال.

استخدام MEF للإضافات الإضافية لا يمنعك من استخدام الوحدة في تطبيقك الأساسي ، لكنني أفهم أنه خفيف الوزن للغاية ، بحيث لا يكون ذلك كثيرًا من المعنى.

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