具有多个值的资源文件(或通过代码访问注释列)

时间:2012-12-06 09:43:44

标签: c# .net enums embedded-resource

是否可以拥有包含多个值的条目的资源文件。

EG。我希望有类似的东西。

  

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实现这种效果,但我猜测最好的方法是什么,因为我们将拥有大量的权限,并且不知何故有一个巨大的ENUM与2同样巨大的想法扩展令我感到奇怪。

    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!";
             }
        }
    }

我也接受其他建议吗?

1 个答案:

答案 0 :(得分:1)

也许你可以试试这个(或类似的东西):

1)使用您的ID创建资源文件。 F.e。

   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个字段的包装类 - 值和描述,f.e。

    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));

可能你想在某种缓存中存储已经包装过的对象的集合,或者。