سؤال

لدي فصل سيحتاج إلى استخدام نمط تصميم الإستراتيجية. في وقت التشغيل ، يُطلب مني تبديل الخوارزميات المختلفة للداخل والخارج لمعرفة التأثيرات على أداء التطبيق.

يأخذ الفصل المعني حاليًا أربعة معلمات في المنشئ ، يمثل كل منها خوارزمية.

كيف استخدام Ninject (أو نهج معمم) لا يزال بإمكاني استخدام IOC ولكن استخدام نمط الإستراتيجية؟

القيد الحالي هو أن kernel (الحاوية) تدرك كل واجهة خوارزمية ، ولكن يمكن أن يكون ذلك فقط مرتبطًا بفئة خرسانية واحدة. الطريقة الوحيدة حول هذا يمكنني رؤيتها في الوقت الحالي هي المرور في جميع الخوارزميات الثمانية في البناء ، ولكن استخدام واجهات مختلفة ، ولكن هذا يبدو غير ضروري تمامًا. لن أفعل ذلك إذا لم أكن أستخدم حاوية IOC ، لذلك يجب أن يكون هناك بطريقة ما.

مثال رمز:

class MyModule : NinjectModule 
{
    public override void Load() 
    {
        Bind<Person>().ToSelf();
        Bind<IAlgorithm>().To<TestAlgorithm>();
        Bind<IAlgorithm>().To<ProductionAlgorithm>();
    }
}

يحتاج الشخص إلى الاستفادة من كلا الخوارزميات حتى أتمكن من التبديل في وقت التشغيل. ولكن فقط testalgorithm ملزم ، لأنه الأول في الحاوية.

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

المحلول

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

ال حل DI القياسي عندما تحتاج إلى تعيين مثيل وقت التشغيل إلى التبعية هو استخدام مصنع مجردة.

بدلاً من تسجيل الاستراتيجيات الفردية مع الحاوية ، يمكنك تسجيل المصنع.

من الممكن تمامًا كتابة واجهة برمجة تطبيقات كاملة بحيث تكون كذلك ديني ، ولكن لا يزال حاوية di-agnostic.

نصائح أخرى

إذا كنت بحاجة إلى تغيير IAlgorithm التنفيذ في وقت التشغيل ، يمكنك التغيير Person لتتطلب خوارزمية مصنع التي توفر خوارزميات خرسانية مختلفة بناءً على ظروف وقت التشغيل.

تتيح لك بعض حاويات حقن التبعية ربط المندوبين الإبداعيين المجهولين - إذا كان Ninject يدعم ذلك ، فيمكنك وضع منطق القرار في أحد هؤلاء.

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