以前に同様の要件があり、リソースを.resxファイルに格納しましたが、キーを格納するためにクラスを使用することにしました。
たとえば、銀行の引き出し画面のリソースがあるとします。
私はの行に簡単なクラスを作成しました
public class BankingWithdrawalResource
{
public string WithdrawFunds { get; set; }
}
次に、リソースを取得するためのクラスを実装しました。私の目的は、強く型付けされた方法でリソースを引き出すことでした。また、リソース検索ユニットをテスト可能にしたいと考えました。リソースを取得するためのインターフェースを抽出しました:IResource
。
リソースを使用するたびに、IoCコンテナーを介して実装を取得しました。
var resource = Dependency.Resolve<IResource>();
最後に、リソースを使用することになると、次のようになります。
resource.For<BankingWithdrawalResource>(p => p.WithdrawFunds)
上記の行では、使用可能なすべてのリソースをインテリセンスで表示できるようにするラムダ式を使用しました。
単体テストになるIResource
と、私はそれをあざけって期待を立てます。
例えば:
resourceMock.Expect(a => a.For<BankingWithdrawalResource>(p => p.WithdrawFunds)).Repeat.Once();
また、リソースを取得するためのインターフェースを抽出したことにも注意してください。このため、リソースを好きな場所に保存できるようになりました。例えば:
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
}
上記はメモ帳で頭の上から書いたので、何か問題がありましたらお知らせください。後で実装を追加します。