2012-09-13 18 views
9

मेरे पास एक एमवीसी 3 एप्लीकेशन है जिसे मैं एमवीसी 4 पर पोर्ट करना चाहता हूं। मैं निर्भरता इंजेक्शन के लिए Ninject का उपयोग कर रहा हूँ। Nuget का उपयोग करना, मैं अपने प्रोजेक्ट के लिए "Ninject" जोड़ा गया है और नीचे के रूप मेंनिंजा और एएसपीनेट एमवीसी 4

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
    private IKernel ninjectKernel; 

    public NinjectControllerFactory() 
    { 
     ninjectKernel = new StandardKernel(); 
     AddBindings(); 
    } 

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) 
    { 
     return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType); 
    } 

    private void AddBindings() 
    { 
     //Add ninject bindings here 
    } 
} 

यह MVC3 के लिए ठीक काम करता है पता चला है, लेकिन चीजों MVC4 में बदल गया है एक नियंत्रक कारखाना बनाया। मैं कुछ खुदाई किया था और इस लिंक बताते हैं कि

http://haacked.com/archive/2012/03/11/itrsquos-the-little-things-about-asp-net-mvc-4.aspx

MVC4

के लिए काम हालांकि, मैं मुसीबत संकलित करने के लिए ऊपर दिए गए लिंक में कोड हो रही हो रहा है Ninject पाने के लिए मिल गया। विशेष रूप से, कोड है कि मैं web.common फ़ाइल की विधि प्रारंभ() में जगह करना चाहिए मुझे अनसुलझे नाम स्थान त्रुटियों

GlobalConfiguration.Configuration.ServiceResolver 
    .SetResolver(DependencyResolver.Current.ToServiceResolver()); 

दोनों "ServiceResolver" और ".SetResolver" अनसुलझे हैं देता है। इन्हें सक्षम करने के लिए मुझे किन संदर्भों को जोड़ने की आवश्यकता है? इसके अलावा, यदि संभव हो तो आप मुझे एक ट्यूटोरियल की ओर इशारा कर सकते हैं कि मुझे दिखा रहा है कि कैसे nuget पैकेज ninject.mvc3 को स्थापित किए बिना एमवीसी 4 में काम कर रहा है? मैं पूछता हूं क्योंकि मैं अपने आवेदन में किसी भी पैकेज को स्थापित नहीं करना चाहूंगा जो एमवीसी 3 के लिए लिखा गया था, विशेष रूप से लाइन को तोड़ने से बचने के लिए अगर इन नुजेट पैकेज अपडेट किए गए हैं।

संपादित करें: मैं जोड़ लिया है चाहिए कि मैं Visual Studio 2012 का उपयोग कर रहा है और नेट 4.5

उत्तर

14

फिल के लेख वेबएपीआई साथ Ninject का उपयोग कर के बारे में है। क्या यही मतलब है तुम्हारा? आपको सामान्य एमवीसी इंजेक्शन के लिए ऐसा करने की आवश्यकता नहीं है। इसके अलावा, आपको एमवीसी 4 के साथ Ninject.MVC3 NuGet पैकेज का उपयोग करना चाहिए (हाँ, मुझे पता है कि यह एमवीसी 3 कहता है, लेकिन यह अभी भी ठीक काम करता है क्योंकि NuGet विधानसभा संस्करण रीडायरेक्ट सेट करता है जो सबकुछ बस काम करता है), यह सब कुछ सेट करता है और आप ' एक नियंत्रक कारखाने की जरूरत नहीं है। अपनी बाइंडिंग जोड़ने के लिए बस NinjectWebCommon.cs फ़ाइल संपादित करें।

+1

मैं वेबएपीआई आवश्यकता नहीं है। NinjectWebCommon.cs में मुझे अपनी बाइंडिंग कहां जोड़नी चाहिए? "शुरुआत" विधि में? साथ ही, क्या आप ninject.mvc3 पैकेज को मेरे एप्लिकेशन को तोड़ने के अपडेट के लिए कोई संभावित क्षमता देखते हैं? धन्यवाद –

+0

@curiouspanda - अपडेट हमेशा चीजों को तोड़ सकते हैं, और निनजेक्ट कुछ पुनरावृत्तियों से गुजर चुका है जिसने इसके साथ काम करने के "पसंदीदा" तरीके को बदल दिया है, लेकिन सामान्य कोड में संगत रहना चाहिए। यदि आप वेबएपीआई का उपयोग नहीं करते हैं तो फिल का लेख लागू नहीं होता है। आप NinjectWebCommon.cs की RegisterServices विधि में अपनी मैपिंग पंजीकृत करते हैं –

0

बस बस नाम स्थान Nuget से टेम्पलेट स्थापित करने के बाद

Using Ninject; 

जोड़ें ... यू सिर्फ Nuget खाका से "Ninject" लेकिन "Ninject MVC3 के लिए" स्थापित

संबंधित मुद्दे