के साथ एक एमवीसी वेब ऐप में सरल इंजेक्टर कंटेनर और लाइफस्टाइल को कॉन्फ़िगर कैसे करें सरल इंजेक्टर दस्तावेज WebRequest, वेब एपीआई, डब्ल्यूसीएफ, के लिए कंटेनर को सेटअप करने के तरीके पर महान उदाहरण प्रदान करता है ... लेकिन उदाहरण एक समय में एक तकनीक/जीवनशैली के लिए विशिष्ट हैं। हमारा वेब एप्लिकेशन उनमें से ज्यादातर का एक साथ उपयोग करता है! मुझे यह स्पष्ट नहीं है कि कंटेनर को कई जीवन शैली के साथ काम करने के लिए कैसे कॉन्फ़िगर करें।वेबएपीआई, डब्ल्यूसीएफ, सिग्नलआर और पृष्ठभूमि कार्य
मान लें कि मेरे पास वेब एपीआई के साथ एक एमवीसी प्रोजेक्ट है। मैं निम्नलिखित वस्तुओं है:
- MyDbContext: मेरी इकाई कोड पहले db संदर्भ
- IMyDataProvider MyDataProvider द्वारा कार्यान्वित: क्वेरी तर्क शामिल है और का उपयोग करता है MyDbContext
- MyController: MVC नियंत्रक IMyDataProvider का उपयोग करता है
- MyApiController: WebAPI नियंत्रक जो IMyDataProvider
क्या मुझे प्रत्येक प्रकार की जीवनशैली के लिए एक कंटेनर बनाना और कॉन्फ़िगर करना चाहिए?
जब मैं RegisterPerWebRequest<T>
के साथ सबकुछ पंजीकृत करता हूं तो दोनों प्रकार के नियंत्रकों में काम करता है। क्या यह सुरक्षित है? या वेब एपीआई नियंत्रक में async/await का उपयोग करते समय मैं परेशानी में भाग जाऊंगा?
मेरे पास एमवीसी और वेब एपीआई नियंत्रक दोनों हैं जो एक ही उदाहरण इंजेक्शन देते हैं तो सबसे अच्छा कॉन्फ़िगरेशन क्या होता है?
क्या मुझे एक संकर जीवनशैली का उपयोग करना चाहिए?
अब चीजों को जटिल करने के लिए ... हमारा एप्लिकेशन पृष्ठभूमि कार्यों और सिग्नलआर का भी उपयोग करता है।
इनमें से दोनों कभी-कभी WebRequest के बाहर होते हैं और ऊपर वर्णित वही ऑब्जेक्ट तक पहुंच की आवश्यकता होती है।
लाइफटाइम गुंजाइश का उपयोग करने का सबसे अच्छा समाधान होगा?
क्या मुझे उस जीवन शैली के लिए एक नया कंटेनर बनाने की आवश्यकता होगी? या मैं अपने एमवीसी/वेब एपीआई कंटेनर का पुन: उपयोग/पुन: कॉन्फ़िगर कर सकता हूं?
क्या कोई तिहाई जीवनशैली है?
मुझे पता था कि एमवीसी और वेबएपीआई समान नहीं थे लेकिन मुझे कहना होगा कि मुझे यह जानकर आश्चर्य हुआ कि यह एक ही प्रोजेक्ट में मिश्रण करने के लिए खराब डिजाइन है। यह देखते हुए कि वे एमवीसी 6 में विलय हो जाएंगे, मैं इस वास्तुकला के साथ रहने में सक्षम हूं। हाइब्रिड लाइफस्टाइल का उपयोग एमवीसी, वेबएपीआई और सिग्नलआर/बीजी टास्क के साथ सिम्पलजे इंजेक्टर का उपयोग करने का सबसे आसान तरीका प्रतीत होता है। हालांकि मुझे _lifestyleSelector_ को निम्नानुसार बदलने की आवश्यकता है: 'कंटेनर। गेटक्रोरेंट लाइफटाइमस्कोप() == नल और& HttpContext.Current! = Null' जब यह मौजूद है तो यह स्पष्ट रूप से दायरे का उपयोग करने के लिए होता है, भले ही कोई HttpContext मौजूद हो (सिग्नल अनुरोध के अंदर) – Chris