2009-09-23 76 views
1

道歉的稱號,我被困了話揭露MEF的版本裝「插件」

我傾我的腳趾在MEF池塘。到現在爲止還挺好。我有一個主機應用程序和一些導出東西的「插件」程序集。主機應用程序定義了一個稱爲DescriptionAttribute的屬性從ExportAttribute繼承和具有簡單的Name屬性。我的測試表格有一個<ImportMany>IEnumerable(Of Lazy(Of IDoStuff, IDescriptionAttribute))。這得到了MEF的好評,我可以通過收集,Name財產充滿,生活是金色的。 稍後我會將事情分解成單獨的程序集,目前它只是概念證明

現在,問題是:我可以通過DescriptionAttribute屬性公開我佩戴「插件」類的IDoStuff實現的程序集版本DescriptionAttribute嗎?我迄今所有將它傳遞給屬性構造函數的嘗試都失敗了,工作室一直告訴我需要一個常量表達式(可以理解)。我可以通過IDoStuff接口公開它,但將它作爲DescriptionAttribute屬性的一部分會更好,因爲它的「感覺」更好。我也可以對它進行硬編碼,但這是另一個發佈新版本「插件」時忘記更新的地方:-)

回答

1

所以你有一堆實現IDoStuff的類的實例,由MEF導入,並且你想知道它們每個的程序集版本?

你能做到這一點? GetType()將返回基礎類的類型,對吧?不是typeof(IDoStuff)?

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

啊,'GetType,我一直忘記那個。是的,這是一個可行的解決方案。如果我需要其他的東西,我可以將它硬編碼爲DescriptionAttribute屬性的參數。 我試了一下,它的工作原理,你是一個冠軍馬特! – 2009-09-23 09:31:15