2010-10-06 2 views
7

NuPack addin का उपयोग करके और NInject MVC 3 पैकेज को संस्थापित करने के परिणामस्वरूप उत्पन्न NinjectMVC3.cs फ़ाइल में निम्न संकलन त्रुटि में परिणाम।NuPack से जेनरेट किए गए NinjectMVC3.cs संकलित क्यों नहीं करते हैं? (या ASP.NET MVC 3 बीटा में MvcServiceLocator के साथ क्या हुआ?)

The name 'MvcServiceLocator' does not exist in the current context

sample video डेविड Ebbo तैनात यह working just fine at 09:43 को दर्शाता है।

public class NinjectMVC3 { 
    public static void RegisterServices(IKernel kernel) { 
     //kernel.Bind<IThingRepository>().To<SqlThingRepository>(); 
    } 

    public static void SetupDependencyInjection() { 
     // Create Ninject DI Kernel 
     IKernel kernel = new StandardKernel(); 

     // Register services with our Ninject DI Container 
     RegisterServices(kernel); 

     // Tell ASP.NET MVC 3 to use our Ninject DI Container 
     MvcServiceLocator.SetCurrent(new NinjectServiceLocator(kernel)); 
    } 
} 

उत्तर

13

असल में, MvcServiceLocator दूर चला गया है:

यहाँ वर्तमान में उत्पन्न वर्ग है। जब भी वीडियो बनाया गया था, तो संस्करणों में एक मेल नहीं था, मुझे लगता है।

उत्कृष्ट here उपलब्ध और here स्पष्टीकरण रहे हैं।

दो कदम Ninject काम कर देगा कि इस प्रकार हैं। निम्नलिखित के साथ NinjectMVC3 बदलें (मैं भी नाम है जो आवश्यक नहीं है परिवर्तित):

public class NinjectResolver : IDependencyResolver 
{ 
    private static IKernel kernel; 

    public NinjectResolver() 
    { 
     kernel = new StandardKernel(); 
     RegisterServices(kernel); 
    } 

    public static void RegisterServices(IKernel kernel) 
    { 
     //kernel.Bind<IThingRepository>().To<SqlThingRepository>(); 
    } 

    public object GetService(Type serviceType) 
    { 
     return kernel.TryGet(serviceType); 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     return kernel.GetAll(serviceType); 
    } 
} 

और gloabl.asax.cs

DependencyResolver.SetResolver(new NinjectResolver()); 
+0

हाँ! NuPack पैकेज एमवीसी 3 पूर्वावलोकन 1 पर आधारित था और इसे अद्यतन करने की आवश्यकता है। धन्यवाद! –

+0

मैं आज बाद में लाइव पैकेज को तय करने का प्रयास करूंगा, धन्यवाद! –

5

में App_Start() में निम्नलिखित पंक्ति जोड़ मैं पैकेज तय कर दी है और करने के लिए इसे अपलोड भोजन। यह बहुत अच्छा होगा अगर आपको इसका प्रयास करने का मौका मिला और यह सत्यापित हो कि यह अब काम करता है। मैंने Ninject.MVC3 के संस्करण को 0.1 से 0.2 तक बढ़ा दिया :)

+0

दोनों संस्करण Ninject.MVC (0.1 और 0.2) जोड़ें पैकेज संदर्भ जीयूआई में प्रकट होना चाहिए? नया एक (0.2) निश्चित रूप से अपेक्षित के रूप में बनाता है। – Jedidja

+0

नहीं, यह नहीं होना चाहिए। यूआई अभी भी बहुत शुरुआती आकार में है। यह सिर्फ एक प्रोटोटाइप कम या ज्यादा है। –

+2

असल में, यह संकलित है, लेकिन कोड चलाने की कोशिश कर रहा है, मुझे लगता है कि 'System.Web.Mvc.IMvcServiceLocator' को 'विधानसभा' सिस्टम से लोड नहीं किया जा सका। वेब.एमवीसी, संस्करण = 3.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 31bf3856ad364e35 '। – Jedidja

1

मैंने अभी निनजेक्ट.एमवीसी 3 0.3 स्थापित किया है। मैं एएसपी.नेट एमवीसी 3 बीटा का उपयोग कर रहा हूँ।

मैं अपने Global.asax.cs फ़ाइल में इस कोड को जोड़ दिया है:

public static void RegisterServices(IKernel kernel) 
    { 
     kernel.Bind<IProductRepository>().To<SqlProductRepository>(); 
    } 

    public void SetupDependencyInjection() 
    { 
     IKernel kernel = new StandardKernel(); 
     RegisterServices(kernel); 
     DependencyResolver.SetResolver(new Ninject.Mvc3.NinjectServiceLocator(kernel)); 
    } 

और मैं Application_Start() समारोह में SetupDependencyInjection() के लिए एक कॉल जोड़ दिया है तो यह इस तरह दिखता है:

protected void Application_Start() 
    { 
     SetupDependencyInjection(); 

     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 
    } 

IProductRepository और SqlProductRepository वे वर्ग हैं जिन्हें मैंने अपने मॉडल फ़ोल्डर में बनाया है और मैंने अपने HomeController पर एक कन्स्ट्रक्टर निर्भरता जोड़ा है। यहां कोड है:

private IProductRepository products; 

    public HomeController(IProductRepository productRepository) 
    { 
     products = productRepository; 
    } 

मैंने कुछ ब्रेकपॉइंट जोड़े हैं और एप्लिकेशन चलाया है और यह एक आकर्षण की तरह काम करता है। उम्मीद है की यह मदद करेगा।

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