2016-04-14 19 views
3

弱い型のリソースファイルにアクセスする必要があります。つまり、完全な名前空間+ファイル名を渡すResourceManagerでリソースにアクセスしてアクセスする必要があります。ResourceManagerとnameof演算子を使用したリテラルリソースキーの検索

var rm = new ResourceManager("namespace.name.locale.brand", Assembly.GetExecutingAssembly()); 

私はリファクタリングしない安全な方法で 'myImage'を介して自分のリソースイメージにアクセスします。

string imageUrl = rm.GetString("myImage"); 

ロケール/ブランド名が異なる多くの.resxファイルがあるとします。彼らはすべて異なるイメージを持っていますが、彼らは同じキーを持っています。したがって、私は実行時に正しいリソースを知っているので、静的型付けされたリソースにはアクセスできません。

しかし、私の希望は、nameof演算子とリソースマネージャインスタンスの組み合わせが難しいということです。

誰でも知っているのは難しいですか?

これらの.resxファイルのすべてに静的な形式でアクセスし、そのキーをnameofで上記の.GetString()メソッドに渡すことを推奨しないでください。 THEN

がNameOfオペレータとの解がない場合いずれかのツールは歓迎されてあまりにも;-)

答えて

0

あなたは、静的な型のリソースを持っている必要はありませんので、コードを手動で更新するよりも、他の方法はありません。

ただし、リソースにアクセスするためのラッパーを作成することはできます。ラッパーを作成することで、1つのファイル内でアクセスを集中化できます。また、F2の名前を変更すると、一度変更することができます。

public class ResourceWrapper 
{ 
    private ResourceManager rm; 

    public ResourceWrapper(string name) : 
     this(name, Assembly.GetCallingAssembly()) 
    { 
    } 
    public ResourceWrapper(string name, Assembly assembly) 
    { 
     rm = new ResourceManager(name, assembly); 
    } 

    public string myImage => rm.GetString(nameof(myImage)); 
} 

または、静的リソースファイルのいずれかにリンクしnameofため名前プロバイダとして使用することができます。 Like:

string imageUrl = rm.GetString(nameof(DummyResource.myImage)); 
関連する問題