2010-01-13 20 views
5

के साथ ईवेंट हैंडलर को इंजेक्ट कैसे करें I0C कंटेनर Unity द्वारा बनाए गए उदाहरणों की घटनाओं को ईवेंट (संलग्न) कैसे करें?यूनिटी

उदाहरण: मैं एक वर्ग है कि एक मानक .net घटना के माध्यम से त्रुटियां रिपोर्ट है:

class CrashMonitor 
{ 
    public static void HandleException(Exception x) 
    { ... } 
} 

मुझे क्या करना चाहते हैं:

class CameraObserver 
{ 
    public event Action<Exception> UnhandledException;  
    [...] 
} 

मैं एक वर्ग है कि उन घटनाओं से निपटने के लिए reponsible है ऐसा करने के लिए स्वचालित रूप से हैंडलर को क्रैश मॉनिटर से इस छद्म कोड में कैमरे ऑब्सर्वर के हर उदाहरण में इंजेक्ट करना है:

UnityContainer container = new UnityContainer(); 
container.RegisterInstance<Action<Exception>>(CrashMonitor.HandleException) 
    .RegisterType<CameraObserver>(new InjectionEvent(UnhandledException)); 

var observer = container.Resolve<CameraObserver>(); 
// CrashMonitor.HandleException is now attached to observer.UnhandledException 

क्या एकता के साथ ऐसा करने का कोई तरीका है? मैं कैमरे ऑब्सर्वर से निर्भरता इंजेक्शन या एक विधि इंजेक्शन के लिए एक विशेष कन्स्ट्रक्टर इरादे के साथ एक बदसूरत कामकाज के बारे में सोच सकता हूं। लेकिन इससे सिस्टी अधिक जटिल हो जाएगा (क्योंकि आपको कोड लिखना है)। मैं उम्मीद करता हूं कि आप घटना पर एक [निर्भरता] विशेषता जोड़ सकते हैं और सब कुछ काम करना चाहिए।

उत्तर

3

मैं codeplex

http://unity.codeplex.com/Thread/View.aspx?ThreadId=80728

पर एकता चर्चा समूह में एक ही सवाल पूछा है और जवाब "कोई बात नहीं है" है। इवेंट ब्रोकर का एक डेमो है लेकिन यह क्या करता है और अधिक जटिल (प्रकाशकों और ग्राहकों की स्वायत्तता) है। मुझे अभी भी लगता है कि घटनाओं को इंजेक्ट करने के लिए एक KISS तंत्र उपयोगी है और इसे स्वयं करना शुरू कर दिया है।

+0

अरे, ईसाई, क्या आपने कभी इसके बारे में कुछ और पाया है, या क्या आपने अपने मूल कस्टम डिज़ाइन के साथ चिपकाया है? मैं एक "शुद्ध" एमवीवीएम डिज़ाइन के साथ एकता का उपयोग करने की कोशिश कर रहा हूं, जिसका मूल रूप से बेस व्यूमोडल से विरासत में बंद किया गया था, जहां मैंने कस्टम इवेंट हैंडलर में एक प्रतिनिधि को पारित किया था। जब तक मैंने सब कुछ इंजेक्ट करने के लिए एकता का उपयोग करने की कोशिश नहीं की, तब तक बहुत अच्छा काम किया, और फिर यह तुरंत टूट गया। यदि आपके पास कोई समाधान है जो मुझे अच्छा कर सकता है, तो मैं कुछ ज्ञान की सराहना करता हूं। धन्यवाद! –

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