2017-02-22 1 views
3

C#의 리플렉션 및 사용자 지정 특성을 사용하여 일련의 형식을 중앙 관리 클래스에 쉽게 등록 할 수 있습니다. 즉, 정적 메서드를 사용하여 문자열 키를 가져오고 연관된 유형에 대한 적절한 메소드/매개 변수). 여기 다른 질문들과 다른 곳에서 몇 곳을 보면서, 그렇게하는 가장 좋은 방법은 어셈블리의 모든 공개 유형을 반복하는 것입니다. (라이브러리가되기위한 것이므로) 각 유형에 적절한 유형이 있는지 확인하십시오 속성을 사용하여 기본 사전에 관련 값을 추가하십시오. 반성과 반복은 분명히 천천히 진행될 것입니다.하지만 한번만 발생해야하기 때문에 함께 살 수 있습니다..NET 표준에서 Type의 사용자 지정 특성 검색

불행히도 유형에서 속성을 가져 오는 방법을 알 수 없습니다. 메서드와 어셈블리의 경우 System.Reflection.Extensions에있는 CustomAttributeExtensions.GetCustomAttribute<MyAttribute>(base)을 사용할 수 있지만 Type에 대한 과부하는 제공하지 않습니다. this question에서 사용 된 Assembly.GetCustomAttribute(Assembly, Type).IsDefined(...)에 대해서도 동일합니다. Othersuggestionsthe documentation에서 Type 자체의 메서드를 사용하면 mscorelib.dll에서로드되는 것처럼 보이지만 참조를 추가 한 후에도 Intellisense에 나타나지 않는 것 같아 .dll과 상호 작용하는 방법을 모르겠습니다. 어쨌든 (예를 들어, 임의의 플랫폼에서 실행할 수있는 능력이 줄어든다.)

분명하지 않은 것이 있습니까? 아니면 AttributeType에서 다시 열 수 있습니까?

+0

당신이') (해당 GetCustomAttributes'호출 할 방법의 예를 보여줄 수보십시오? –

+0

@ RenéVogt'CustomAttributeExtensions.GetCustomAttribute (base)'이 ('base'는 테스트하려고했던'Type')에 대한 것이 었습니다. 그러나 더 나은 푯말을 붙여 조금 더 많은 컨텍스트를 포함 할 수 있음을 인정합니다. 어느 쪽이든, 아래의 Connell의 대답이 효과가있었습니다. – WovenTales

답변

4

typeof(YourType).GetTypeInfo().GetCustomAttributes();

+0

아, 그게 다야! 거기에있는'Info'는 명백하게 아주 중요합니다. 이제 내 유일한 질문은 내가 다른 대답에서 그걸 보지 못하는 이유입니다. 감사! – WovenTales

+0

.net 프레임 워크에서 GetType()과 함께 작동합니다. .net core에는 GetTypeInfo()가 필요합니다. –

+0

그건 의미가 있습니다. .NET Core 및 Standard 뒤에있는 사고 방식을 좋아하지만 도움이되지만 문서가 약간 희박하다고 느끼지는 않습니다. – WovenTales