2011-12-01 12 views
8

मैं कस्टम ResourceManager.GetString (...) विधि कार्यक्षमता को प्राप्त करने के Resources.Designer.cs फ़ाइल से System.Resources.ResourceManager ओवरराइड करना चाहते। क्या यह संभव है?कैसे Resources.Designer.cs में डिफ़ॉल्ट System.Resources.ResourceManager ओवरराइड करने के लिए?

+0

आप संसाधनप्रबंधक बजाय लपेट कर सकते हैं यह अधिभावी की? – Filip

+0

हाँ मैं कर सकता हूँ। मैं बस कस्टम संसाधन प्रबंधक प्राप्त करना चाहता हूं। गेटस्ट्रिंग (...) कार्यक्षमता। –

+0

फिर इसे कस्टम क्लास में लपेटें और उस कक्षा के GetString विधि में सभी अतिरिक्त कार्य करें। – Filip

उत्तर

2

मेरा मानना ​​है कि आप दो अलग-अलग सवाल यहाँ पूछ रहे हैं। आप निश्चित रूप से ResourceManager.GetString ओवरराइड कर सकते हैं। हालांकि, आप ऑटो-जेनरेट Resource.Designer.cs कोड में उस ओवरराइड का उपयोग नहीं कर सकते हैं। इसका उपयोग करने के लिए, आपको अपना खुद का Resource डिज़ाइनर क्लास लिखना होगा।

public class CustomResourceManager : ResourceManager 
{ 
    public CustomResourceManager(Type resourceSource) 
     :base(resourceSource) 
    { 
    } 

    public CustomResourceManager(string baseName, Assembly assembly) 
     : base(baseName, assembly) 
    { 
    } 

    public CustomResourceManager(string baseName, Assembly assembly, Type usingResourceSet) 
     : base(baseName, assembly, usingResourceSet) 
    { 
    } 

    public override string GetString(string name) 
    { 
     // your business logic 
    } 

    public override string GetString(string name, CultureInfo culture) 
    { 
     // your business logic 
    } 
} 

तब मैं अपने प्रोजेक्ट के लिए एक पूर्व निर्माण कदम एक System.Resources.ResourceManager के निर्माण को बदलने के लिए मेरी CustomResourceManager साथ उत्पन्न में कहा:

public class MyResourceManager : System.Resources.ResourceManager 
    { 
    // override 
    public override GetString(string name) 
     { 
     // custom code 
     } 
    } 

public class MyResourceDesigner 
    { 
     // use your custom class with override 
     private static MyResourceManager resourceManager; 
     private static CultureInfo resourceCulture; 

     public static MyResourceManager ResourceManager 
     { 
      if (object.ReferenceEquals(resourceManager, null)) 
       { 
        // Resource is just the name of the .resx file 
        // be sure to include relevant namespaces 
        var temp = new MyResourceManager(
        "MyProject.Resource", 
        typeof(MyResourceDesigner).Assembly); 
        resourceManager = temp; 
       } 

      return resourceManager; 
     } 

     public static CultureInfo Culture 
     { 
     get 
     { 
      return resourceCulture; 
     } 

     set 
     { 
      resourceCulture = value; 
     } 
     } 

     // start adding strongly-typed objects 
     public static string Foo 
     { 
     get 
     { 
      // use your override 
      return ResourceManager.GetString("Foo", resourceCulture); 
     } 
     } 
    } 
+0

यह पूर्ण होने का मतलब नहीं है, हालांकि इसमें 'वर्ग' कीवर्ड गुम है। कृपया अपनी आलोचनात्मक रचनात्मक बनाने की कोशिश करें। – Kjata30

3

मैं एक CustomResourceManager कि GetString() कॉल तो जैसे ओवरराइड करता है बनाया Resource.Designer.cs फ़ाइल:

powershell -command "(gc ..\Resources\Resource.Designer.cs).Replace(\"new global::System.Resources.ResourceManager\", \"new CustomResourceManager\") | set-content ..\Resources\Resource.Designer.cs -Encoding UTF8" 

और दूर हम जाते हैं!

+1

यह बहुत अच्छा काम करता है, जब तक कोड से संसाधनों का उपयोग किया जा रहा है। रेजर दृश्यों से संसाधनों का उपयोग करते समय ऐसा लगता है कि संकलित किए गए "अनुकूलित" संस्करण के बजाय मूल जेनरेट किया गया संस्करण उपयोग किया जा रहा है। कोई उपाय? – laureysruben

+0

कस्टम संसाधन प्रबंधक को मेरे लिए दृश्य से बुलाया जा रहा है। आपका विचार कैसा दिखता है? मेरा नमूना इस तरह दिखता है: '@using my.Namespace.Resources' [नई पंक्ति] '

@ संसाधन.फू

' – djs

+1

ऐसा लगता है कि हम वास्तव में क्या कर रहे हैं, लेकिन यह अभी भी काम नहीं करता है। जब हम जांच जहाँ हम इस App_GlobalResources.gecvukmg.dll में और डिजाइनर कोड फ़ाइल में नहीं खत्म करने के लिए दृष्टिकोण में संसाधनों। तो ऐसा लगता है कि उत्पन्न (और छेड़छाड़) डिजाइनर कोड फ़ाइल का उपयोग दृश्य द्वारा उपयोग किए गए संकलित App_GlobalResources.gecvukmg.dll में नहीं किया जाता है। – laureysruben

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