Antes tenía un requisito similar y almacené recursos en un archivo .resx, pero decidí usar clases para almacenar las claves.
Por ejemplo, supongamos que tengo recursos para la pantalla de retiro bancario.
He creado una clase simple en las líneas de
public class BankingWithdrawalResource
{
public string WithdrawFunds { get; set; }
}
Luego implementé una clase para recuperar recursos. Mi objetivo era tener una forma fuertemente tipada de extraer recursos. También quería hacer comprobable la unidad de recuperación de recursos. He extraído una interfaz para la recuperación de recursos: IResource
.
Cada vez que quería usar recursos, recibía una implementación a través del contenedor IoC.
var resource = Dependency.Resolve<IResource>();
Finalmente, cuando se trataba de usar el recurso, tendría algo en la línea de:
resource.For<BankingWithdrawalResource>(p => p.WithdrawFunds)
En la línea anterior, utilicé la expresión lambda que me permitió ver todos los recursos disponibles a través de intellisense.
Cuando se trataba de pruebas unitarias, me burlaría IResource
y establecería expectativas al respecto.
Por ejemplo:
resourceMock.Expect(a => a.For<BankingWithdrawalResource>(p => p.WithdrawFunds)).Repeat.Once();
Observe también que hemos extraído una interfaz para la recuperación de recursos. Debido a esto, ahora podemos almacenar recursos en cualquier lugar que queramos. Por ejemplo:
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
}
Escribí arriba desde la parte superior de mi cabeza en el bloc de notas, así que si tienes algún problema, avísame y agregaré la implementación más adelante.