سؤال

لدي طريقة مصنع داخل محلل. بشكل أساسي أثناء تحميل رمز رمز ، أبحث عن معالج لهذا الرمز المميز ، أو أسقط إلى المعالج الافتراضي. لقد قمت بتطبيق هذا على أنه أ switch وك Dictionary<string,Type> لكن كلا النهجين يتطلبان مني تخزين الرسم البياني في مكان آخر غير فئة المعالج.

نحن نستخدم Ninject لـ IOC ، لذا أدركت أنه يمكنني أيضًا القيام بذلك باستخدام

kernel.Get<ITokenHandler>(tokenName); 

لكن هذا لا يوفر لي تخزين المعلومات حول الرمز المميز الذي يمكن للمعالج التعامل معه في موقعين. هل هناك طريقة يمكنني تزيين المعالج بحيث يتم تعيين هذا تلقائيًا؟

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

المحلول

إذا اتبعت سؤالك بشكل صحيح ، يبدو أنك تريد استرداد ملزمة مسماة. لم تذكر إصدار Ninject الذي تستخدمه ، ولكن استنادًا إلى مقتطف الرمز الخاص بك ، أعتقد أنك تستخدم Ninject 2.0. إذا كان هذا هو الحال ، فأعتقد أن هذا سيكون كافياً لربطك في الوحدة النمطية الخاصة بك:

Bind<ITokenHandler>().To<YourConcreteTypeHere>().Named(tokenName);

يمكنك ربط العديد من أنواع الخرسانة بنفس الواجهة وتميزها بالاسم ، ثم استرجعها باستخدام بناء الجملة الدقيق الذي حددته في سؤالك.

إذا فقدت شيء مفتاح ، فأخبرني بذلك.

نصائح أخرى

إحدى التقنيات التي استخدمتها هي Bind الأشياء بطريقة يمكن أن تتطلب تسليم معلمة (في السياق) في النقطة التي تريد أن يختار فيها شخص ما شيئًا ما.

ما بين http://ninject.codeplex.com/wikipage؟title=providers٪20and٪20The٪20Activation٪20Context و http://ninject.codeplex.com/wikipage؟title=Contextual٪20Binding يجب أن تكون قادرًا على ربط الأشياء بطريقة يمكنك قولها Only(When.Context...) لجعل الاختيار يعمل؟

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