سؤال

أريد س ربط وحدة تحكم بلدي مع المعلمة التي يتم تقييمها كسول.

 protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        try
        {
            return controllerType == null
                       ? null
                       : (IController) _ninjectKernel.Get(controllerType);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

ولدي الربط التالي:

_ninjectKernel.Bind<IFilesRepository>().To<FilesManager>().WithConstructorArgument("storageFolderAbsolutePath", c => c.ToString());

المشكلة هي في وظيفة لامدا.أريد أن أعود الخادم.ماباث ("/")...ولكن ليس لدي سياق الطلب في الكائن ج.كيف يمكنني إرسالها?

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

المحلول

أنا لست على دراية بشكل مفرط مع نينجيكت ، ولكن يجب أن تكون قادرة على تسجيل مزود مع الحاوية لتكون قادرة على حل HttpContextBase.من خلال القيام بذلك ، فإن IFilesRepository يمكن الآن اتخاذ HttpContextBase كوسيطة منشئ ، والتي سيتم حقنها بواسطة الحاوية ، باستخدام الموفر ، عند إنشاء مثيل IFilesRepository.

لتسجيل مزود (باستخدام مندوب لحل الخدمة),

Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current));

كن على علم مع ذلك ، أن نمط حياة IFilesRepository ستحتاج على الأرجح إلى التغيير إلى نمط حياة "لكل طلب ويب" ، مثل HttpContext.Current يتم إنشاؤه لكل طلب ويب ، لذلك كنت لا تريد أن تذهب التمسك بذلك في IFilesRepository كان ذلك أسلوب حياة أطول.قد ترغب في تجريد وظيفة "مسارات التعيين" بحيث يمكنك الحصول على IFilesRepository مع نمط حياة أطول.

نصائح أخرى

نظرًا لأن متغير الخادم مرتبط بـ HttpContext الحالي ، فسيتعين عليك استرداده داخل فئة FilesManager (باستخدام واجهة منفصلة لهذا الغرض إذا صح التعبير)

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