Ich hatte zuvor eine ähnliche Anforderung und habe Ressourcen in einer .resx-Datei gespeichert, aber ich habe mich entschieden, Klassen zum Speichern der Schlüssel zu verwenden.
Angenommen, ich habe Ressourcen für den Bildschirm für Bankabhebungen.
Ich habe eine einfache Klasse nach dem Vorbild von erstellt
public class BankingWithdrawalResource
{
public string WithdrawFunds { get; set; }
}
Ich habe dann eine Klasse zum Abrufen von Ressourcen implementiert. Mein Ziel war eine stark typisierte Art, Ressourcen herauszuholen. Ich wollte auch die Ressourcenabrufeinheit testbar machen. Ich habe eine Schnittstelle zum Abrufen von Ressourcen extrahiert : IResource
.
Jedes Mal, wenn ich Ressourcen verwenden wollte, erhielt ich eine Implementierung über den IoC-Container.
var resource = Dependency.Resolve<IResource>();
Wenn es darum ging, die Ressource zu nutzen, hätte ich Folgendes:
resource.For<BankingWithdrawalResource>(p => p.WithdrawFunds)
In der obigen Zeile habe ich einen Lambda-Ausdruck verwendet, mit dem ich alle verfügbaren Ressourcen über Intellisense anzeigen konnte.
Wenn es um Unit-Tests ging, verspottete ich IResource
und stellte Erwartungen daran.
Zum Beispiel:
resourceMock.Expect(a => a.For<BankingWithdrawalResource>(p => p.WithdrawFunds)).Repeat.Once();
Beachten Sie auch, dass wir eine Schnittstelle zum Abrufen von Ressourcen extrahiert haben. Aus diesem Grund können wir Ressourcen jetzt überall speichern, wo wir wollen. Zum Beispiel:
public class DatabaseResource : IResource
{
// Logic to retrieve resources from database
// Won't cause recompilation
}
public class XmlResource : IResource
{
// Logic to retrieve resources from xml files
}
public class DefaultResource : IResource
{
// Will cause recompilation as resources are stored in .resx
}
Ich habe oben von oben in den Notizblock geschrieben. Wenn Sie also Probleme haben, lassen Sie es mich wissen und ich werde die Implementierung später hinzufügen.