Avevo un requisito simile prima e ho memorizzato le risorse in un file .resx ma ho deciso di utilizzare le classi per memorizzare le chiavi.
Ad esempio, supponiamo di avere risorse per lo schermo di prelievo bancario.
Ho creato una classe semplice sulle linee di
public class BankingWithdrawalResource
{
public string WithdrawFunds { get; set; }
}
Ho quindi implementato una classe per il recupero delle risorse. Il mio scopo era quello di avere un metodo strongmente tipizzato per estrarre risorse. Volevo anche rendere l'unità di recupero delle risorse testabile. Ho estratto un'interfaccia per il recupero delle risorse: IResource
.
Ogni volta che volevo utilizzare le risorse, ottenevo un'implementazione tramite il contenitore IoC.
var resource = Dependency.Resolve<IResource>();
Infine, quando si trattava di usare la risorsa, avrei qualcosa sulla falsariga di:
resource.For<BankingWithdrawalResource>(p => p.WithdrawFunds)
Nella riga sopra, ho usato l'espressione lambda che mi ha permesso di visualizzare tutte le risorse disponibili tramite intellisense.
Quando si trattava di test delle unità, prendevo in giro IResource
e impostavo le aspettative su di esso.
Ad esempio:
resourceMock.Expect(a => a.For<BankingWithdrawalResource>(p => p.WithdrawFunds)).Repeat.Once();
Si noti inoltre che è stata estratta un'interfaccia per il recupero delle risorse. Per questo motivo, siamo ora in grado di immagazzinare le risorse ovunque vogliamo. Ad esempio:
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
}
Ho scritto sopra in cima alla mia testa nel blocco note, quindi se hai qualche problema fammelo sapere e aggiungerò l'implementazione più tardi.