2

複数の値を持つエントリを持つリソース ファイルを持つことは可能ですか。

例えば。のようなものが欲しいです。

Resource.CanViewSection.Value
Resource.CanViewSection.Description.

この理由は、データベースがコード ファースト アプローチで作成されており、アプリケーションに非常に細かい権限を実装する必要があるためです。それらをすべて一元化するのが好きです。

したがって、データベースシーダーでは、次のようなことができます。

private IEnumerable<Permission> SetupParameterPermissions()
{
    var innerCollection = new List<Permission>
        {
            //id like to do this
            this.New(Resource.CanViewSection.Value, Resource.CanViewSection.Description),

            //instead of this
            this.New("CanViewSection", "User can view the section")
        };

    return this.SetGroupId(innerCollection, PermissionGroupEnum.Parameters);
}

私たちのサービスでは、次のようにリソースに対してアクセス チェックを実行するだけです。

例えば。

if(UserHasAccessTo(Resource.CanViewSection.Value))
{
// do something amazing
}

私はいくつかのアプローチを試みました、EG。リソースの値の列に名前を追加し、コメント セクションに説明を追加しますが、リソース ファイルのコメント列にプログラムでアクセスする方法がわかりません。

ENUMSでもこの効果を達成できることはわかっていますが、大量の権限があり、2つの同様に巨大な拡張機能を持つ巨大なENUMのアイデアが奇妙なので、最善のアプローチが何であるかを推測しています.アウト。

    public enum SomeEnum
    {          
        CanViewSection
    }    

    public static class SomeEnumExtensions
    {           
        public static string GetValue(this SomeEnum)
        {
            switch (me)
            {
                case SomeEnum.CanViewSection:
                    return "CanViewSection";
                default:
                    return "Fail!";
            }
        }

        public static string GetDescription(this SomeEnum)
        {
            switch (me)
            {
                case SomeEnum.CanViewSection:
                    return "YOLO!";
                default:
                    return "Fail!";
             }
        }
    }

他の提案も受け付けていますか?

4

1 に答える 1

1

多分あなたはこれを試すことができます(またはそれに似たもの):

1) ID でリソース ファイルを作成します。フェ

   Resource.Code1
   Resource.Code2

2) XML ファイルを作成し、プロジェクトに追加します。おそらく次のようになります。

   <codes>
          <Code1 Value="Some value text" Description="Some description">
          <Code2 Value="Some value text" Description="Some description">
   </codes>

3) 2 つのフィールド (値と説明、fe) を持つある種のラッパー クラスを作成します。

    public class ResourceWrapper
    {
    public string Value {get;set;}
    public string Description{get;set;}
    }

3) 次に、リソース ファイルのコードによって XML ファイルから値を取得し、解析して、結果として ResourceWrapper を返す単純な静的メソッドを作成します。

  public static class ResourceHelper
  {
        public static ResourceWrapper GetSomeWrapper(string resourceCode);
  }

呼び出しは次のようになります(あなたの場合):

  ResourceWrapper wrap = ResourceHelper.GetSomeWrapper(Resource.Code1.ToString());
  this.Add(new Permission(wrap.Value, wrap.Description));

おそらく、すでにラップされたオブジェクトのコレクションをある種のキャッシュに保存したいと思うでしょう。

于 2012-12-06T10:31:46.180 に答える