Tuesday 15 February 2011

c# - What is the proper pattern for instantiating and showing a window that relies on a value selected in the current window? -


निर्भरता इंजेक्शन सिद्धांतों और एक डि कंटेनर का उपयोग करना, एक बाल संवाद को लॉन्च करने के लिए उचित पैटर्न क्या है जिसके लिए चयन किया गया है एक निर्भरता के रूप में मूल विंडो? उदाहरण: मुख्य विंडो पर एक सूची में एक व्यक्ति व्यू मॉडल चुनें, और विवरण विंडो लॉन्च करने के लिए एक बटन पर क्लिक करें।

  1. निर्भरता और उपयोग के रूप में बाल विंडो में पास करें ShowDialog पर कॉल करने से पहले बच्चे की विंडो निर्भरता प्रदान करने के लिए प्रॉपर्टी इंजेक्शन।
  2. एक व्यूफ़ैक्टर में पास करें जो बाल विंडो को हल करने के लिए उपयोग किया जाता है और शोडीयलोग को कॉल करने से पहले बाल विंडो निर्भरता प्रदान करने के लिए प्रॉपर्टी इंजेक्शन का उपयोग करता है।
  3. < / Ol>

    जो मैं देख रहा हूं वह आम तौर पर स्वीकार किए जाने योग्य परीक्षण योग्य पैटर्न है। डीआई के सभी उदाहरण जो मुझे लगता है कि केवल एक परत गहरी हैं या माता-पिता विंडो में चयनित निर्भरता की आवश्यकता नहीं है।

    धन्यवाद!

मैं एक अलग विधि सुझाता हूँ जिस तरह से मैं यह करने की सिफारिश करता हूं, वह संवाद विंडो प्रदर्शित करने के लिए एक छोटा प्रबंधक ऑब्जेक्ट बनाने के लिए है, जिसके द्वारा आप विंडो विंडो के दृश्य-मॉडल को पैरामीटर पारित कर सकते हैं, इससे पहले कि वह विंडो खुद बना सके।

अपनी खिड़की और दृश्य-मॉडल के लिए कारखाने बनाएं, और उन्हें इस तरह का उपयोग करें:

  सार्वजनिक वर्ग विवरणविंडो डिस्प्लेयर: आईडीअजिवंडोडिस्प्लेयर {निजी रीडोनली आईडीइजिवंडोएफ़ाफ़ार्क विंडोफैक्टर; निजी रीडोनली आईडीअड्ज WindowViewModelFactory viewModelFactory; सार्वजनिक विवरणविंडो डिस्प्लेयर (आईडीईज़िवंडोफ़ाइनरी विंडोफैटरिनेटर, आईडीइजिवंड्यूव्यूमोडेलफैटरी देखेंमॉडेलफैक्चर) {this.windowFactory = windowFactory; This.viewModelFactory = viewModelFactory; } सार्वजनिक शून्य ShowDetails (IPersonViewModel व्यक्ति ViewModel) {var windowViewModel = this.viewModelFactory.Create (personViewModel); Var विंडो = this.windowFactory.Create (windowViewModel); window.Show (); }}  

फिर माता-पिता को देखने के मॉडल में आईडीइजिवंडोडाइप्लेयर इंजेक्शन लगाने का एक सरल मामला है, और ShowDetails विधि को बुला रहा है। यह एक सिंगल कॉल में डायलॉग को दिखाता है, और DetailsWindowDisplayer में केवल एक ही जिम्मेदारी है।

इसे पूरी तरह से परीक्षण करने योग्य बनाने के लिए, आपका विंडो फ़ैक्टरी इंटरफ़ेस वापस करना चाहिए। आप निम्न पदानुक्रम के साथ ऐसा कर सकते हैं:

  सार्वजनिक इंटरफ़ेस IDialogWindow {शून्य दिखाएँ (); } सार्वजनिक इंटरफ़ेस आईडी विवरणविंडो: IDialogWindow {} सार्वजनिक वर्ग विवरणविंडो: खिड़की, आईडीइज्डविंडो {// शो () विधि से IDialogWindow स्वचालित रूप से // WPF विंडो वर्ग द्वारा कार्यान्वित किया जाता है}  

अगर आप चाहें अपनी विवरण विंडो को सिंगलटन के रूप में रखने के लिए, आप खिड़की को DetailsWindowDisplayer के निर्माता में इंजेक्ट कर सकते हैं और या तो 1. इसे दिखाए जाने पर हर बार एक नया दृश्य-मॉडल सेट करें, या 2. इसे अपना दृश्य- एक सिंगलटन मॉडल को भी, खिड़की पर एक ViewModel संपत्ति डालते हैं और दृश्य-मॉडल पर एक व्यक्ति संपत्ति डालते हैं, और फिर व्यक्ति को सेट करते हैं हर बार नया व्यक्तिव्यू मॉडेल उदाहरण बनें।


No comments:

Post a Comment