내 사용자 지정 특성의 생성자 안에 사용자 지정 특성이 있습니다. 내 특성의 속성 값을 특성이 적용된 속성의 형식으로 설정하려고합니다. 속성이 있던 구성원에 액세스 할 수있는 방법이 있습니다. 내 속성 클래스 내부에서 적용됩니까?내부 특성 생성자에서 특성이 적용된 멤버 가져 오기?
11
A
답변
13
속성은 그렇게 작동하지 않습니다. 두렵습니다. 그것들은 단지 개체에 붙어 있지만 그것들과 상호 작용할 수없는 "마커"일뿐입니다.
속성 자체는 일반적으로 동작이없고 단순히 첨부 된 유형의 메타 데이터 만 포함해야합니다. 속성과 관련된 모든 동작은 속성의 존재를 찾고 작업을 수행하는 다른 클래스에 의해 제공되어야합니다.
속성이 적용되는 유형에 관심이있는 경우 해당 정보는 속성을 얻기 위해 반영됩니다.
+0
Reflection을 통해 사용자 지정 특성을 가져올 때 형식을 알면 세상 끝이 아니지만 GetCustomAttribute에 전달 된 Type도 System.Attribute에 저장되는 경우 "nice"가됩니다. –
0
다음 작업을 수행 할 수 있습니다. 그것은 간단한 예입니다.
//target class
public class SomeClass{
[CustomRequired(ErrorMessage = "{0} is required", ProperytName = "DisplayName")]
public string Link { get; set; }
public string DisplayName { get; set; }
}
//custom attribute
public class CustomRequiredAttribute : RequiredAttribute, IClientValidatable
{
public string ProperytName { get; set; }
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var propertyValue = "Value";
var parentMetaData = ModelMetadataProviders.Current
.GetMetadataForProperties(context.Controller.ViewData.Model, context.Controller.ViewData.Model.GetType());
var property = parentMetaData.FirstOrDefault(p => p.PropertyName == ProperytName);
if (property != null)
propertyValue = property.Model.ToString();
yield return new ModelClientValidationRule
{
ErrorMessage = string.Format(ErrorMessage, propertyValue),
ValidationType = "required"
};
}
}
0
그것은 CallerMemberName
를 사용 .NET 4.5에서 가능 :
[SomethingCustom]
public string MyProperty { get; set; }
이 그런 다음 속성이
:[AttributeUsage(AttributeTargets.Property)]
public class SomethingCustomAttribute : Attribute
{
public StartupArgumentAttribute([CallerMemberName] string propName = null)
{
// propName = "MyProperty"
}
}
관련 문제
- 1. 생성자에서 속성 가져 오기
- 2. 정적 생성자에서 TypeInfo 가져 오기
- 3. 애트리뷰트 생성자에서 주석 메서드 가져 오기
- 4. Attribute.IsDefined에 MetadataType 클래스에 적용된 특성이 표시되지 않습니다.
- 5. 최신 승인 멤버 가져 오기
- 6. 다른 클래스의 생성자에서 값 가져 오기
- 7. 문제 (생성자에서 가상 멤버 호출)
- 8. 버튼 내부 텍스트 가져 오기
- 9. MVC2 모델의 속성에서 DisplayName 특성 가져 오기
- 10. 요소에서 XSOM을 사용하여 minOccurs 특성 가져 오기
- 11. C#에서 문자열을 통해 멤버 가져 오기?
- 12. 개체가없는 멤버 함수의 반환 유형 가져 오기
- 13. 셀렉터를 사용하여 내부 자식 가져 오기
- 14. UIScrollView에보기로드 및 내부 내용 가져 오기
- 15. jQuery Ajax - 요소 내부 텍스트 가져 오기
- 16. 내부 변수에 멤버 변수 전달?
- 17. 기본 특성이 무스에서 변경 될 때 지연된 특성 다시 작성
- 18. C# .NET에서 XML 특성 가져 오기 탭 문자
- 19. 디렉터리에 액세스하는 동안 디렉터리 아래에있는 모든 파일의 특성 가져 오기
- 20. 멤버 자격 공급자에 대해서만 ASP.NET MVC 컨트롤러의 [Authorize] 특성이 있습니까?
- 21. x : Name 특성이 항상 멤버 또는 필드 변수를 만들지 않는다
- 22. backbone.js 모델 내부 특성 해시를 직접 설정하십시오
- 23. ExpressionEngine 멤버 가져 오기 : XML 파일에없는 DB에서 멤버를 삭제 하시겠습니까?
- 24. 전체 주소 목록 (EWS) 내의 PublicGroup에서 GroupContact 멤버 가져 오기
- 25. 리플렉션 (또는 다른 방법)을 사용하여 멤버 개체 가져 오기
- 26. 가져 오기 배열 가져 오기
- 27. PHP에서 CSS 스타일 가져 오기
- 28. 별개의 SelectListItem 가져 오기
- 29. 공백 xmlns = ""가져 오기에서의 특성
- 30. 클래스에 대해 XmlRoot 가져 오기
당신이 간단하게 사용 사례를 설명 할 수 있습니까? – Tanmay
해결하려는 문제에 대해 더 자세하게 설명 할 수있는 경우 대체 솔루션을 제공 할 수 있습니다. –
고마워, 내가 다른 방식으로 같은 것을 얻을 수있는 방법을 알고 있지만, 코드가 더 깨끗해지기 때문에 가능한지 알고 싶었다. – ryudice