2

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

例如。我想拥有类似的东西。

资源.CanViewSection.Value 资源
.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
}

我尝试了几种方法,例如。在资源的值列中添加名称并在评论部分添加描述,但我不知道如何以编程方式访问资源文件的评论列。

我意识到我也可以使用 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 回答