2009-09-23 4 views
1

사과 "플러그인"로드 MEF의 버전을 노출, 나는 내가 MEF 연못에서 내 발가락을 담그고있어 단어타이틀

에 대한 붙어있어. 여태까지는 그런대로 잘됐다. 호스트 애플 리케이션과 물건을 수출하는 "플러그인"어셈블리가 두 개 있습니다. 호스트 앱은 DescriptionAttribute이라는 속성을 정의하고 ExportAttribute에서 상속되며 간단한 Name 속성을가집니다. 내 테스트 양식은 <ImportMany>IEnumerable(Of Lazy(Of IDoStuff, IDescriptionAttribute))입니다. 이것은 MEF로 멋지게 채워지고 컬렉션을 통해 스핀 할 수 있으며 Name 속성이 채워지고 인생은 황금색입니다. 나중에 다른 어셈블리로 물건을 나눠 보겠습니다. 지금은 단지 개념 증명 일뿐입니다.

이제 질문은 : 내가 가지고있는 DescriptionAttribute 속성을 통해 구현의 DescriptionAttribute "플러그인"클래스를 구현하는 어셈블리 버전을 공개 할 수있는 방법이 있습니까? 지금까지 애트리뷰트의 생성자에 전달할 때 시도한 모든 시도가 실패했습니다. 스튜디오는 계속해서 상수 표현이 필요하다는 것을 계속합니다. IDoStuff 인터페이스를 통해이를 노출 할 수 있지만 대신 DescriptionAttribute 속성의 일부로 사용하는 것이 훨씬 더 좋을 것입니다. "기분"이 좋습니다. 또한 하드 코딩 할 수도 있지만 새 버전의 "플러그인"을 출시 할 때 업데이트하는 것을 잊어 버릴 수있는 또 다른 곳입니다.

답변

1

그래서 IDoStuff를 구현하는 클래스의 인스턴스가 MEF에서 가져 왔습니다. , 그리고 각각의 어셈블리 버전을 알고 싶습니까?

사용 권한을 부여 할 수 있습니까? GetType()은 기본 클래스의 유형을 반환합니다. 맞습니까? typeof (IDoStuff)가 아닌가요?

// IDoStuff myStuffDoer 
var version = myStuffDoer.GetType().Assembly.GetName().Version; 
+0

아, 'GetType, 저도 그걸 잊고 있습니다. 네, 그럴만 한 해결책이 될 것입니다. 그리고 내가 아닌 다른 것을 필요로한다면, 그것을 DescriptionAttribute 속성에 대한 매개 변수로 하드 코딩 할 수 있습니다. 나는 그것을 시험해 보았다, 그것은 작동한다, 당신은 챔피언 매트 다! –

관련 문제