2012-12-06 30 views
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來達到這個效果,但是我第二次猜測最好的方法是什麼,因爲我們會有很多的權限,不知何故,一個巨大的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

另一個有效的用戶案例是翻譯 - 如果您需要將多語言映射到一個資源文件中。 – Default

+0

誠然,感謝您的意見。我不確定我們是否需要迎合多種語言(內部應用程序),但我想它總是很高興有可用的選項。 (雖然可以在prod數據庫中修改描述,但一旦它被播種) –

回答

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

也許你想存儲已包裝的對象的集合,在某種高速緩存,否則的。