2011-05-25 141 views
4

我有這個想法嘗試使用自定義的IMPORT屬性來根據條件新建一個類。舉例來說,如果我有:MEF和WPF自定義導入定義

[導入( 「Position_32」)]如果我在運行32位操作系統,然後這應該存在:

[導入( 「Position_64」),如果im運行64位操作系統。有什麼方法可以根據條件爲動態屬性創建類型名稱?

概念上,它可能看起來像這樣:

[導入(((IsWIN64()) 「Position_64」: 「Position_32」))]這並不工作,因爲類型名稱必須是一個常數。

我想盡可能透明地將適當的位置類型做成新的。我的意思是我用funcs做了一個基於工廠的方法來獲得我想要的效果,但我很想用MEF來做這件事。想法?

謝謝了,

大衛

回答

2

你可以使用ExportMetadataAttribute像這樣:

[Import("Position")] 
[ExportMetadata("Platform", "32bit")] 
public YourType ... 

然後,當你去進口,使用:

[ImportMany] 
public Lazy<YourType,IDictionary<string,object>>[] Positions { get; set; } 

然後,您可以檢查Dictionary以獲取適當的元數據,並使用該特定元數據平臺,在運行時。

此外,您可以爲強類型元數據(而不是字符串)創建自定義界面。有關詳情,請參閱Exports and Metadata

+1

不錯。我看看這些。非常感謝 – 2011-05-25 16:30:28