दिलचस्प पोस्ट
जावास्क्रिप्ट में KB, MB, GB में बाइट्स में आकार कन्वर्ट करने का सही तरीका कैसे Android में datepicker संवाद में अधिकतम तारीख सेट? एंड्रॉइड में एसडीसीडी से एक विशिष्ट फाइल को पढ़ना स्थान मोड को सक्षम करने के लिए उपयोगकर्ता को बिना सेटिंग के लिए उच्च सटीकता या बैटरी बचत, प्रोग्रामेटिक रूप से सेटिंग (नया ऐरे (10))। नक्शा (कार्य () {वापसी 1;}) देता है … क्यों? मशीन कहां है? कॉन्फ़िगर? खोज का प्रदर्शन () बनाम फर्स्टऑरिफॉल्ट () मौजूदा पीडीएफ़ को पायथन से पाठ जोड़ें कोड समीक्षा के बाद पुल अनुरोध को अपडेट करने के लिए पसंदीदा गिथूब वर्कफ़्लो .gitignore फ़ोल्डर को बहिष्कृत करते हैं लेकिन विशिष्ट सबफ़ोल्डर शामिल करते हैं स्काला असाइनमेंट के मूल्यांकन के लिए यूनिट के मूल्यांकन के लिए प्रेरणा क्या है? MongoDB और नोडजे के साथ दिनांक डालने और पूछताछ हटाए जाने के लिए हटाएं? मैं बिना किसी अनुमति के नए पर्ल मॉड्यूल का उपयोग कैसे कर सकता हूं? एक नोड.जेएस स्क्रिप्ट शेल पाइप के माध्यम से चल रही है या नहीं?

सरल इंजेक्टर वेब एपीआई नियंत्रकों में निर्भरता इंजेक्ट करने में असमर्थ

मैं सरल इंजेक्टर के साथ कुछ बुनियादी कन्स्ट्रक्टर DI को करने का प्रयास कर रहा हूं और ऐसा लगता है कि यह वेब एपीआई कंट्रोलर्स के लिए निर्भरताओं को हल करने में असमर्थ है।

  • मेरे पास "API" फ़ोल्डर में एक एपीआई नियंत्रक है, जो "नियंत्रक" फ़ोल्डर के बाहर है।
  • मैंने इसे "कंट्रोलर्स" फ़ोल्डर में रखने की भी कोशिश की है, लेकिन ऐसा लगता नहीं है कि कोई फर्क नहीं पड़ता। मुझे प्राप्त होने वाले स्टैक ट्रेस इस प्रश्न में प्रस्तुत किए गए एक जैसा है।
  • मैं "सिग्नल इंजेक्टर एमवीसी इंटीग्रेशन क्विक स्टार्ट" नूगाकेट पैकेज (वी। 2.1.0) के नए इंस्टालेशन का उपयोग कर रहा हूं।
  • मेरे पास SimpleInjectorWebApiDependencyResolver प्रलेखन से है, जो यहाँ भी पाया गया है ।
  • मैं इकाई फ़्रेमवर्क का उपयोग कर रहा हूं, और संदर्भ को सही ढंग से लोड करने के बारे में चर्चा के सूत्र के बारे में देखा है।

यह एक समस्या नहीं है, लेकिन मुझे अभी भी निम्न त्रुटि प्राप्त होती है:

प्रकार 'MyProject.API.ArticleController' में एक डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है

सिस्टम

System.Linq.Expressions.Expression.New System.Web.Http.Internal.TypeActivator.Create पर [TBase] (प्रकार प्रकार टाइप करें) सिस्टम पर। Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator (HttpRequestMessage अनुरोध, प्रकार नियंत्रक टाइप करें , Func11 और एक्टिवेटर) सिस्टम। वेब। एचटीपी.डिस्पचर। डिफॉल्ट एचटीपीटीकंट्रोलर एक्टिवेटर.क्रेट (एचटीटीपीएंडएस्ट मेसेज अनुरोध, एचटीटीपी कंट्रोलर डिस्क्रिप्टर नियंत्रक डिस्क्रिप्टर, टाइप कंट्रोलर टाइप)

यह सराहना की जाएगी अगर कोई मुझे कुछ सुझाव दे सकता है, चाहे उसके वर्तमान राज्य / कॉल ऑर्डर से कुछ भी संशोधित किया जाना चाहिए।

अनुच्छेद कंट्रोलर (मूल संरचना):

 public class ArticleController : ApiController { private readonly IArticleRepository articleRepository; private readonly IUserRepository userRepository; private readonly IReleaseRepository releaseRepository; public ArticleController(IArticleRepository articleRepository, IUserRepository userRepository, IReleaseRepository releaseRepository) { this.articleRepository = articleRepository; this.userRepository = userRepository; this.releaseRepository = releaseRepository; } // GET api/Article public IEnumerable<Article> GetArticles(){ // code } // GET api/Article/5 public Article GetArticle(int id){ // code } // PUT api/Article/5 public HttpResponseMessage PutArticle(int id, Article article){ // code } // POST api/Article public HttpResponseMessage PostArticle(ArticleModel article){ // code } // DELETE api/Article/5 public HttpResponseMessage DeleteArticle(int id){ // code } } 

SimpleInjectorInitializer:

 public static class SimpleInjectorInitializer { public static void Initialize() { var container = new Container(); InitializeContainer(container); container.RegisterMvcControllers(Assembly.GetExecutingAssembly()); container.RegisterMvcAttributeFilterProvider(); container.Verify(); DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container)); } private static void InitializeContainer(Container container) { container.Register<IArticleRepository, ArticleRepository>(); container.Register<IUserRepository, UserRepository>(); container.Register<IReleaseRepository, ReleaseRepository>(); } } 

Global.asax.cs:

 public class WebApiApplication : System.Web.HttpApplication { private void ConfigureApi() { // Create the container as usual. var container = new Container(); // Verify the container configuration // container.Verify(); // Register the dependency resolver. GlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); ConfigureApi(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } 

Solutions Collecting From Web of "सरल इंजेक्टर वेब एपीआई नियंत्रकों में निर्भरता इंजेक्ट करने में असमर्थ"

टीएलटीआर: समस्या नियंत्रक प्रकारों को सुलझाने के लिए वेब एपीआई के निहित मार्ग से होती है; अपने वेब एपीआई नियंत्रकों को स्पष्ट रूप से पंजीकृत करें और आप देखेंगे कि समस्या कहां है

यहां कवरेज के तहत क्या हो रहा है, यह एक कदम है:

  1. System.Web.Http.DefaultHttpControllerActivator SimpleInjectorWebApiDependencyResolver में कॉल करता है और एपीआई नियंत्रक के निर्माण का अनुरोध करता है।
  2. SimpleInjectorWebApiDependencyResolver कि SimpleInjector.Container उदाहरण को कॉल करें।
  3. उस Container उदाहरण में, उस एपीआई नियंत्रक के लिए कोई स्पष्ट पंजीकरण नहीं है (जब से आपने रिज़ॉल्वर को एक खाली कंटेनर दिया था)।
  4. चूंकि कोई स्पष्ट पंजीकरण नहीं है, कंटेनर उस प्रकार के लिए अंतिम मिनट पंजीकरण करने की कोशिश करता है।
  5. वह नियंत्रक प्रकार हालांकि इंटरफेस पर निर्भर करता है जो हल नहीं किया जा सकता क्योंकि वे कंटेनर में पंजीकृत नहीं हैं (याद रखें, आपका कंटेनर खाली है)।
  6. यद्यपि कंटेनर सामान्य रूप से एक अपवाद फेंकता होता है, इस मामले में शून्य लौटा जाता है, क्योंकि इस प्रकार IServiceProvider.GetService विधि के माध्यम से अनुरोध किया जाता है और प्रकार का विवरण विचित्र रूप से दर्ज नहीं किया गया था।
  7. SimpleInjectorWebApiDependencyResolver की GetService विधि के रूप में अच्छी तरह से वापसी होगी, क्योंकि यह परिभाषा के अनुसार है कि इसे रिक्त करना चाहिए; पंजीकरण न होने पर इसे रिक्त करना चाहिए (जो वर्तमान में मामला है)
  8. चूंकि DependencyResolver ने शून्य लौटा, DefaultHttpControllerActivator अपने डिफ़ॉल्ट व्यवहार में वापस आ जाएगा, जिसका अर्थ है कि उस प्रकार का स्वयं बनाना, लेकिन इसके लिए नियंत्रक को एक डिफ़ॉल्ट कन्स्ट्रक्टर होना आवश्यक है।

लम्बी कहानी छोटी, समस्या नियंत्रक प्रकारों को सुलझाने के लिए वेब एपीआई हैंडल के कारण होता है।

तो इसका समाधान यहां है:

  1. आपके वेब एप्लिकेशन में केवल एक ही Container है यह आपके कॉन्फ़िगरेशन के सभी प्रकार की परेशानी और जटिलता को रोकता है।
  2. सभी वेब एपीआई नियंत्रकों को स्पष्ट रूप से कंटेनर में पंजीकृत करें नियंत्रकों को पंजीकृत करना स्पष्ट रूप से यह सुनिश्चित करेगा कि सरल इंजेक्टर एक अपवाद फेंक देगा जब नियंत्रक का समाधान नहीं किया जा सकता। इसके अलावा, यह आपको container.Verify() को कॉल करने की अनुमति देता है। सत्यापित करें container.Verify() जो कि स्टार्टअप के दौरान एप्लिकेशन को विफल कर देगा, जब कॉन्फ़िगरेशन अमान्य है (एक सत्यापन योग्य कॉन्फ़िगरेशन महत्वपूर्ण है )। और यह आपको कॉन्फ़िगरेशन का निदान भी करने देता है जो आपको आपके कॉन्फ़िगरेशन की शुद्धता के बारे में और भी अधिक आत्मविश्वास देता है।

मेरी सलाह है कि वे अपनी स्वयं की परियोजना में एमवीसी और वेब एपीआई स्थापित करें । इससे चीजें बहुत आसान हो जाएंगी

सभी वेब एपीआई नियंत्रकों को पंजीकृत करना निम्नलिखित कोड के साथ किया जा सकता है:

 container.RegisterWebApiControllers(GlobalConfiguration.Configuration); 

अद्यतन करें:

चूंकि यह त्रुटि इतनी सामान्य है, SimpleInjectorWebApiDependencyResolver वर्ग के नए संस्करण केवल एक null नहीं SimpleInjectorWebApiDependencyResolver जब नियंत्रक प्रकार का अनुरोध किया जाता है। इसके बजाय यह एक वर्णनात्मक त्रुटि फेंक देगा। इस वजह से आपको अब और त्रुटि दिखाई नहीं देनी चाहिए, जब तक आप आधिकारिक SimpleInjectorWebApiDependencyResolver उपयोग करते हैं