2010-03-25 14 views
9

से निनजेक 2 के साथ एएसपी.नेट एमवीसी 2 का उपयोग करके मैंने अभी एक नई परियोजना पर फाइल -> नई परियोजना की है। आह, हरे रंग के खेतों की गंध।स्क्रैच

मैं साथ था हाल ही में रिलीज़ ASP.NET MVC 2 (यानी कोई पूर्वावलोकन या जारी उम्मीदवार, असली बात) का उपयोग कर रहा हूँ, और सोचा मैं एक अच्छी शुरुआत Ninject 2 (भी जारी किया संस्करण) का उपयोग करने के लिए उतरना एमवीसी एक्सटेंशन। I ने एमवीसी एक्सटेंशन प्रोजेक्ट डाउनलोड किया, इसे VS2008Sp1 में खोला, इसे रिलीज़ मोड में बनाया गया, और फिर एमवीसी 2 \ बिल्ड \ रिलीज फ़ोल्डर में गया और वहां से Ninject.dll और Ninject.Web.Mvc.dll को पर कॉपी किया मेरे प्रोजेक्ट पर लाइब्रेरीज़ फ़ोल्डर (ताकि मैं उन्हें स्रोत नियंत्रण में चारों ओर लूंगा और हमेशा हर जगह सही संस्करण हो)। मैंने में संबंधित .xml फ़ाइलों को शामिल नहीं किया - क्या मुझे चाहिए? क्या वे सिर्फ इंटेलिजेंस, या कुछ अन्य फ़ंक्शन प्रदान करते हैं? मुझे विश्वास नहीं है कि एक बड़ा सौदा है।

Anyhoo, मैंने सबसे अद्यतित सलाह का पालन किया जो मुझे मिल सकता था; मैं ने मेरी एमवीसी 2 परियोजना में डीएलएल का संदर्भ दिया, फिर Global.asax.cs पर काम करने के लिए चला गया। सबसे पहले मैंने इसे NinjectHttp अनुप्रयोग से प्राप्त किया। I ने एप्लिकेशन_स्टार्ट() विधि को हटा दिया, और इसके बजाय OnAplicationStarted() को ओवरराइड किया। यहाँ है कि विधि है:

protected override void OnApplicationStarted() 
{ 
    base.OnApplicationStarted(); 
    AreaRegistration.RegisterAllAreas(); 
    RegisterRoutes(RouteTable.Routes); 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
} 

और मैं भी वी.एस. की सलाह का पालन और लागू CreateKernel विधि:

protected override Ninject.IKernel CreateKernel() 
{ 
    // RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    return new StandardKernel(); 
} 

है बस इतना ही। परियोजना में कोई अन्य संशोधन नहीं।

आप देखेंगे कि RegisterAllControllersIn() विधि को ऊपर दिए गए दो स्थानों में पर टिप्पणी की गई है। मैंने पाया है कि मैं इसे तीन अलग-अलग संयोजनों में चला सकता हूं, सभी उनके फंकी साइड इफेक्ट्स के साथ;

  • इसे ऊपर की तरह चल रहा है।

मुझे फिर में "इसकी सभी महिमा" में मानक "एएसपी.नेट एमवीसी में आपका स्वागत है" पृष्ठ के साथ प्रस्तुत किया गया है। हालांकि, इस पृष्ठ को ब्राउज़र में सही तरीके से प्रदर्शित किया गया है, वीएस मुझे एक अपवाद दिखाता है जो फेंक दिया गया था। यह NinjectControllerFactory.GetControllerInstance() में फेंकता है, जिसे नियंत्रक टाइप पैरामीटर में एक पूर्ण मान के साथ कहा जाता था। ध्यान दें कि यह /होम पेज प्रस्तुत करने के बाद होता है - मुझे नहीं पता कि यह क्यों कहा जाता है, और ब्रेकपॉइंट्स का उपयोग करके मैंने पहले से ही निर्धारित किया है कि GetControllerInstance() को होमकंट्रोलर के लिए सफलतापूर्वक बुलाया गया है। कंट्रोलर टाइप के साथ यह नया कॉल क्यों शून्य है? मैं वास्तव में कोई विचार नहीं है। इस समय F5 दबाकर मुझे ब्राउज़र पर वापस ले जाता है, कोई शिकायत नहीं है।

  • में RegisterAllControllersIn() विधि uncommenting CreateKernel()

यह वह जगह है जहां सामान वास्तव में अजीब पाने के लिए शुरू कर रहा है। अब मुझे 404 त्रुटि मिलती है।कुछ बार मैंने RegisterAllControllersIn() लाइन पर ArgumentNullException भी प्राप्त किया है, लेकिन यह बहुत दुर्लभ है, और मेरे पास इसे पुन: उत्पन्न करने में सक्षम नहीं है।

  • RegisterAllControllers uncommenting() OnApplicationStarted() में विधि

(और टिप्पणी CreateKernel में से एक पर वापस डाल()) कि वास्तव में की तरह लगता है व्यवहार में

परिणाम बिंदु 1.

तो हमेशा के लिए जाने से बचने के लिए - क्या एक सटीक चरण-दर-चरण डायनेक्ट 2 के साथ एक एमवीसी 2 प्रोजेक्ट सेट अप करने के तरीके पर मार्गदर्शिका है (दोनों गैर-बीटा निनजेक द्वारा प्रदान किए गए नियंत्रकों को प्राप्त करने के लिए रिलीज संस्करण)? कोर्स के बाद मैं इंजेक्शन (जैसे आईएसशन ऑब्जेक्ट्स और रिपॉजिटरीज, लॉगर्स इत्यादि) के लिए कुछ वास्तविक सामान प्रदान करना शुरू कर दूंगा, लेकिन मैंने सोचा कि मुझे यह पहले काम मिल जाएगा।

किसी भी मदद की अत्यधिक सराहना की जाएगी!

(इसके अलावा Ninject Google समूह पर पोस्ट किए गए)

+0

यह निनजेक्ट लोगों द्वारा तय किए जाने की प्रक्रिया में है। और जब मैं अपने सिर को चारों ओर लपेटता हूं तो सब! –

+0

आप http://github.com/enkari/ninject.web.mvc (readme.markdown) जैसे किसी भी मॉड्यूल को पंजीकृत क्यों नहीं कर रहे हैं? (मैंने थ्रेड को http://groups.google.com/group/ninject/browse_thread/thread/c011f0bd83993a59 पर देखा है)? –

+0

हाय, कोई मॉड्यूल नहीं है क्योंकि यह एक कुंवारी परियोजना है, और भंडार और अन्य चीजें जिन्हें इंजेक्शन दिया जाएगा अभी तक मौजूद नहीं है। एमवीसी प्रोजेक्ट की स्थापना के बाद मैंने पहली चीज को मूल रूप से मिश्रण में निंजा 2 जोड़ने के लिए किया था, यह सुनिश्चित करने के लिए कि नियंत्रक इंजेक्शन काम करता था, और ऐसा नहीं हुआ। तो यही मेरा कारण है। :) –

उत्तर

10

मैं अपने ही सवाल का जवाब देने गंदा लग रहा है, लेकिन किसी को भी, जो इस में भटकना सकता है के लाभ के लिए ...

यह एक Ninject समस्या नहीं है, वास्तव में, ऐसा लगता है कि कैसिनी (वेब ​​सर्वर वीएस 2 के 8 में बनाया गया) के साथ एक मुद्दा प्रतीत होता है, जो आईआईएस की तुलना में इन अनुरोधों को अलग-अलग संभालता है। मूल कारण यह है कि ऐप को favicon.ico के लिए अनुरोध मिलता है, जिसे कैसिनी एमवीसी भेजता है, और निनजेक्ट को यह नहीं पता था कि इसे कैसे संभाला जाए।

इयान डेविस के पास प्रभावशाली रूप से कम समय में इसके लिए एक बग फिक्स था, और विशेष रूप से विकास करते समय इस समस्या से बचने के लिए एक अनदेखा मार्ग जोड़ने की भी सिफारिश की गई। बस अपने रूट कॉन्फ़िगरेशन में निम्न जोड़ें:

routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 

आशा है कि इससे किसी की मदद मिलेगी!

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