私たちのアプリケーションでは、ファイル内の静的プロパティが何千回も使用されていResources.designer.cs
ます。例えば:
Resources.string_to_identify_the_resource
リソースを検索する独自のクラスもありますが、リソースを他のアセンブリからオーバーライドすることもできます。これは、顧客がプラグインまたは製品の名前を変更したい場合に便利です。dll をドロップするだけで完了します。このクラスは次のように使用されます。
Resources.GetString("string_to_identify_the.resource");
オーバーライドできるように、すべてのリソースを独自の Resources クラスを介して検索する必要があり、私はこれを実行する任務を負っています。すべてのコードを調べてリファクタリングするのは好きではありません。
私の最初のアイデアは、カスタム DynamicObject を使用することでした:
public class Resources
{
public static dynamic Dynamic = new StaticResourcesDynamicObject();
class StaticResourcesDynamicObject : DynamicObject
{
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = GetString(binder.Name);
return true;
}
}
// Existing code to lookup resources
public static string GetString(string name)
{
...
}
}
そう
Resources.string_to_identify_the_resource
単純に次のように名前が変更されます。
Resources.Dynamic.string_to_identify_the_resource
主な問題は、多くのリソース名にピリオド ( .
) が含まれているため、静的プロパティと一致しないことです。たとえばCmd.Too_Much
、 の静的プロパティがありCmd_Too_Much
ます。
さまざまな可能性をすべて取得しようとすることができますか、それとも他の誰かが問題の解決策を持っていますか?