2011-12-02 9 views
5

का उपयोग करके अनुग्रहपूर्ण एप्लिकेशन शटडाउन मैं एमईएफ और पीआरआईएसएम 4 का उपयोग करने वाले WPF एप्लिकेशन को बंद करने के लिए "सर्वश्रेष्ठ अभ्यास" (यदि यहां तक ​​कि सबसे अच्छा है) की तलाश में हूं। आखिरकार, मैं कुछ प्रकार की "बंद सेवा" की तलाश कर रहा हूं, शैल से सभी घटनाओं/कमांडिंग को किसी भी व्यूमोडेल (या अन्य सब्सक्राइबर्स) में प्रबंधित करना चाहता हूं जो यह सत्यापित करना चाहते हैं कि एप्लिकेशन को बंद करना ठीक है। घटना एग्रीगेटर सबसे साफ तरीका है? अन्य राय/विकल्प?डब्ल्यूपीएफ PRISM 4

आदर्श रूप से, मेरे टूलबार में मेरे टूलबार व्यू (मेरे शैल में 2 क्षेत्रों में से 1) में एक बटन होगा। यह बटन मेरे टूलबार व्यू मॉडेल पर एक कमांड का आह्वान करेगा (मेरे टूलबार कंट्रोलर पर एक कमांड का संदर्भ देगा) जो बदले में 2 चीजें करेगा (मुझे लगता है?) ... सबसे पहले, सभी ग्राहकों को सूचित करें कि यह बंद हो रहा है और उनमें से किसी को भी बंद करने की अनुमति दें और ... दूसरी बात, अगर कोई भी रद्द नहीं करता है, तो किसी भी तरह से खोल को बंद करने के लिए सूचित करें। मेरा ऐप शट डाउन मोड "शटडाउनमोड.ऑनमेन वाईंडोक्लोज़" पर सेट है, इसलिए यदि शैल बंद हो जाता है, तो मुझे पूरा सेट होना चाहिए।

क्या कोई इस से मेरी सहायता कर सकता है?

उत्तर

3

मैं एक बड़ी आवेदन एक ही सामान का उपयोग कर developping हूँ: MEF और PrismV4

मैं बंद संभाल इसे दूसरे तरीके से एक सा: शैल में
, वहाँ एक "उपकरण" क्षेत्र है, उस के लिए शट डाउन नियंत्रित किया जाता है शेल में, करीबी घटना पर।
फिर अन्य क्षेत्र में इंजेक्शन की गई सभी चीज़ों के लिए, जो एक टैब कंट्रोल है, मैंने सामग्री को IDisposable के रूप में डाला, और प्रत्येक टैब को एक-एक करके बंद कर दिया। (असल में, यह एक टैब कंट्रोल नहीं है, यह एक avalondock घटक है, लेकिन यह वास्तव में एक ही बात है)।
बेशक, आपको निपटान करने के लिए संदर्भों के हर वर्ग पर आईडीस्पोजेबल को लागू करना होगा, लेकिन इंटरफ़ेस सही तरीके से इसका मतलब बिना "बंद करने का साफ तरीका" के बारे में सोचना मुश्किल है? =)

अब, इवेंटएग्रेगेटर के बारे में: आप बहुत अच्छी तरह से परेशानी में भाग सकते हैं, क्योंकि कोई युग्मन नहीं है: आप इसके माध्यम से एक कमजोर घटना को आग लगा सकते हैं, लेकिन आप वस्तुओं के बाद उनके काम करने की प्रतीक्षा नहीं कर सकते।
और फिर, आप शटडाउन को रद्द करने के लिए एक तंत्र नहीं बना सके।

मामले में आप अपने विभिन्न विचारों शटडाउन रद्द करने के लिए सक्षम होना चाहते हैं, मैं आप इसे में एक भी विधि के साथ एक इंटरफेस बनाने की सलाह: तो फिर सही इससे पहले कि आप निपटान के फोन

public interface IShutdownAware 
{ 
    bool CanShutdown(); 
} 

, CanShutdown(); फोन अगर वे सब सच हो जाते हैं, निपटान के साथ आगे बढ़ें, अन्यथा, शटडाउन प्रक्रिया को रद्द करें।

+0

मुझे यह विधि पसंद है, लेकिन मेरे पास अभी भी एक सवाल है। आप अपने सक्रिय विचारों (या मॉडल देखें) का ट्रैक कैसे रखते हैं? "CanShutdown()" को कॉल करने के लिए आप किस संग्रह को फिर से भरते हैं? क्या आप IRegionManager का उपयोग करते हैं और सक्रिय विचार पूछते हैं? – Thelonias

+1

चूंकि आप शैल में ऐसा करेंगे, इसलिए आप शैल में मौजूद विभिन्न लेआउट तत्वों की सामग्री के लिए बस पूछ सकते हैं, और उन पर पुनरावृत्ति कर सकते हैं। यह शायद IRegionManager के साथ भी संभव है, कोशिश करें और देखें कि आपके परिदृश्य में सबसे अच्छा क्या काम करता है। –

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