2012-12-06 1 views
2

여러 값을 가진 항목이있는 리소스 파일을 가질 수 있습니까?여러 값을 가진 리소스 파일 (코드를 통해 설명 열에 액세스)

예 : 이드는 뭔가를 좋아해.

Resource.CanViewSection.Value
Resource.CanViewSection.Description.

이에 대한 나의 이유는 우리의 데이터베이스 코드 첫 번째 방법으로 생성되고, 우리는 우리의 응용 프로그램에 매우 세분화 된 권한을 구현하기 위해 필요 해요, 그래서 권한 & 많이 기대하고 있습니다 것입니다 또는 가능한 반복되는 항목 및 ID를 사용하여 모든 항목을 중앙 집중화합니다.

은 따라서 우리의 데이터베이스 씨 뿌리에서 나는 같은 것을 할 수 있습니다
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에서도이 효과를 얻을 수 있다는 것을 알았지 만, 최선의 접근 방식이 무엇인지 추측하고 있습니다. 우리는 엄청난 권한을 가지게 될 것이고, 어떻게 든 거대한 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!"; 
      } 
     } 
    } 

다른 제안이 있습니까?

+1

하나의 리소스 파일에 매핑 된 여러 언어가 필요한 경우 유효한 다른 사용자 사례는 번역입니다. – Default

+0

입력 해 주셔서 감사합니다.우리가 아직 여러 언어를 제공해야하는지 잘 모르겠지만 (내부 응용 프로그램), 나는 항상 옵션을 사용할 수있는 것이 좋다고 생각합니다. (설명이 시드 된 후에는 prod db에서 변경 될 수 있지만) –

답변

1

어쩌면 당신은 이것을 시도 (또는 같은) 할 수 있습니다

1) 귀하의 ID 년대와 리소스 파일을 만듭니다. F.e.

Resource.Code1 
    Resource.Code2 

2) XML 파일을 만들어 프로젝트에 추가하십시오. 이것은 아마도 다음과 같이 보일 것입니다 :

3) 값과 설명, 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)); 

은 아마 당신이, 또는 다른 캐시의 일종 이미 포장 개체의 컬렉션을 저장하고 싶습니다.

관련 문제