2016-06-30 15 views
0

Gegeben Ich habe zwei resourceManagers:Zwei ResourceManagers Verwenden Sie eine als Rückfall eines anderen

var mgr1 = new ResourceManager("NS1.StringResources", Assembly.GetExecutingAssembly()); 
var mgr2 = new ResourceManager("NS2.OtherStringResources", _otherAssembly); 

Gibt es eine Möglichkeit, dass ich sie zusammenführen können? Oder Ihre Ressourcensätze. so dass ich einen Manager oder ein Ressourcenset haben kann.

+0

'ResourceManager' ist nicht verschlossen ... – Luaan

Antwort

1

mit etwas Ended up ähnlich wie es scheint Wörterbuch einziger Weg zu gehen.

public Dictionary<string, string> GetTotalResourceSet(CultureInfo culture) 
    { 
     Dictionary<string, string> set; 
     if (_resources.TryGetValue(culture.Name, out set)) 
      return set; 

     var wl = getWhitelabelResourceSet(culture); 
     var loc = getLocalResourceSet(culture); 

     var dict = loc.Cast<DictionaryEntry>() 
      .ToDictionary(x => { return x.Key.ToString(); }, x => 
      { 
       if (x.Value.GetType() == typeof(string)) 
        return x.Value.ToString(); 
       return ""; 
      }); 

     if (wl != null) 
     { 
      var wlDict = wl.Cast<DictionaryEntry>() 
       .ToDictionary(x => { return x.Key.ToString(); }, x => 
       { 
        if (x.Value.GetType() == typeof(string)) 
         return x.Value.ToString(); 
        return ""; 
       }); 
      set = wlDict.Concat(dict.Where(kvp => !wlDict.ContainsKey(kvp.Key))).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 
     } 
     else 
     { 
      set = dict; 
     } 


     if (set != null) 
     { 
      _resources.TryAdd(culture.Name, set); 
     } 
     return set; 
    } 
+0

Zu beachten ist, es ermöglicht eine„überschreiben“assembly null zu sein – maxfridbe

1

Nicht schön, aber Sie werden in einem Zusammengeführt Wörterbuch am Ende:

var mgr1 = new ResourceManager("NS1.StringResources", Assembly.GetExecutingAssembly()); 
     var mgr2 = new ResourceManager("NS2.OtherStringResources", _otherAssembly); 
     var combined = new Dictionary<string, object>(); 
     ResourceSet resourceSet = mgr1.GetResourceSet(CultureInfo.CurrentUICulture, true, true); 
     foreach (DictionaryEntry entry in resourceSet) { 
     string resourceKey = entry.Key.ToString(); 
     object resource = entry.Value; 
     combined.Add(resourceKey, resource); 
     } 
     resourceSet = mgr2.GetResourceSet(CultureInfo.CurrentUICulture, true, true); 
     foreach (DictionaryEntry entry in resourceSet) { 
     string resourceKey = entry.Key.ToString(); 
     object resource = entry.Value; 
     combined.Add(resourceKey, resource); 
     }