مفك 3 نينجيكت ربط كسول تقييم المعلمة
-
27-10-2019 - |
سؤال
أريد س ربط وحدة تحكم بلدي مع المعلمة التي يتم تقييمها كسول.
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 (باستخدام واجهة منفصلة لهذا الغرض إذا صح التعبير)