2011-04-29 13 views
13

पर एक स्थिर वस्तु जोड़ना मेरे पास एक वर्ग है जिसे कई विचारों में संदर्भित किया गया है, लेकिन मैं उनके बीच साझा कक्षा का केवल एक उदाहरण होना चाहता हूं। मैंने अपनी कक्षा को इस तरह कार्यान्वित किया है:संसाधन शब्दकोश

using System; 

public class Singleton 
{ 
    private static Singleton instance; 

    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      instance = new Singleton(); 
     } 
     return instance; 
     } 
    } 
} 

क्या कोई तरीका है कि मैं सिंगलटन जोड़ सकता हूं। संसाधन के रूप में मेरे संसाधन शब्दकोश में परिवर्तन? मैं बजाय {x:static my:Singleton.Instance} हर बार जब मैं इसे संदर्भ की जरूरत है लिखने के लिए होने की तरह

<Window.Resources> 
    <my:Singleton.Instance x:Key="MySingleton"/> 
</Window.Resources> 

कुछ लिखने के लिए करना चाहते हैं।

उत्तर

16

स्वीकृत उत्तर गलत है, यह एक्सएएमएल में पूरी तरह से संभव है।

<!-- assuming the 'my' namespace contains your singleton --> 
<Application.Resources> 
    <x:StaticExtension Member="my:Singleton.Instance" x:Key="MySingleton"/> 
</Application.Resources> 
+0

मैंने यह कोशिश नहीं की है, लेकिन [एमएसडीएन] (http://msdn.microsoft.com/en-us/library/ms742135.aspx) ऐसा लगता है कि काम करना चाहिए, इसलिए मैं सिर्फ इस जवाब को स्वीकार करने जा रहा हूं। – Amanduh

+0

यदि आप संसाधन संसाधन में विलय करने का लक्ष्य रखते हैं तो आपको कुंजी की आवश्यकता नहीं होगी। <संसाधन डिक्शनरी। मर्ज किए गए शब्दकोश> Craig

4

दुर्भाग्य से एक्सएएमएल से यह संभव नहीं है। लेकिन आप कोड-बैक से संसाधनों में सिंगलटन ऑब्जेक्ट जोड़ सकते हैं:

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) { 
     base.OnStartup(e); 

     Resources.Add("MySingleton", Singleton.Instance); 
    } 
} 
+2

MSDN के अनुसार StaticExtension नेट ग्राहकों का प्रोफाइल 3.5 या उससे पहले वाले में उपलब्ध नहीं है। अन्य संस्करणों के लिए दूसरे उत्तर में एक्सएएमएल संस्करण देखें। – Alex