2016-04-14 4 views
3

Ich muss auf meine schwach typisierten Ressourcendateien zugreifen, dh ich muss die Ressourcen laden/zugreifen, indem der ResourceManager den vollen Namespace + Dateiname übergibt.Suchen Sie den Literal Resource Key mit dem ResourceManager und dem Namen des Operators

var rm = new ResourceManager("namespace.name.locale.brand", Assembly.GetExecutingAssembly()); 

ich auf meine Ressource Bild über 'myImage' in einer nicht Refactoring sichere Methode.

string imageUrl = rm.GetString("myImage"); 

Stellen Sie sich vor, ich habe viele .resx-Dateien mit verschiedenen Ländereinstellungen/Markennamen. Sie haben alle unterschiedliche Bilder, aber sie haben die gleichen Tasten. Daher kann ich nicht auf diese Ressourcen zugreifen, die statisch eingegeben wurden, da ich zur Laufzeit nur die richtige Ressource kenne.

Aber meine Hoffnung gibt es eine knifflige Art und Weise mit einer Kombination aus Name des Operators und der Ressource-Manager-Instanz.

Wer kennt diesen kniffligen Weg?

Bitte schlagen Sie NICHT vor, auf diese .resx-Dateien auf eine statische Art zuzugreifen und diesen Schlüssel mit nameof an die obige .GetString() -Methode zu übergeben.

, wenn es keine Lösung mit nameof Operator ist jedes Werkzeug willkommen ist dann zu ;-)

Antwort

0

Da Sie wollen nicht statisch typisierte Ressource haben, gibt es keine andere Möglichkeit, als den Code manuell zu aktualisieren.

Sie können jedoch weiterhin einen Wrapper erstellen, um auf die Ressourcen zuzugreifen. Wenn Sie einen Wrapper erstellen, können Sie den Zugriff in einer einzigen Datei zentralisieren. Sie können ihn auch umbenennen F2, um ihn einmal zu ändern.

public class ResourceWrapper 
{ 
    private ResourceManager rm; 

    public ResourceWrapper(string name) : 
     this(name, Assembly.GetCallingAssembly()) 
    { 
    } 
    public ResourceWrapper(string name, Assembly assembly) 
    { 
     rm = new ResourceManager(name, assembly); 
    } 

    public string myImage => rm.GetString(nameof(myImage)); 
} 

Oder Sie können statisch verlinkt auf eine der Ressourcen-Dateien und als Anbieter Name für nameof verwenden. Wie:

string imageUrl = rm.GetString(nameof(DummyResource.myImage)); 
Verwandte Themen