Определение импорта MEF и WPF - PullRequest
4 голосов
/ 25 мая 2011

У меня есть идея попробовать использовать пользовательский атрибут IMPORT для создания нового класса на основе условия. Например, если у меня есть:

[Import ("Position_32")] это должно существовать, если я использую 32-битную ОС, а затем:

[Import ("Position_64")], если у меня 64-битная ОС. Есть ли способ сделать имя типа для атрибута динамическим на основе условия?

Концептуально это может выглядеть так:

[Import (((IsWIN64 ())? "Position_64": "Position_32"))] Это не работает, потому что имя типа должно быть константой.

Я хочу сделать обновление соответствующего класса позиции максимально прозрачным. Я имею в виду, что я сделал фабричный метод с использованием funcs, чтобы получить желаемый эффект, но я бы хотел использовать MEF для этого. Идеи?

Большое спасибо,

David

1 Ответ

2 голосов
/ 25 мая 2011

Вы можете использовать ExportMetadataAttribute примерно так:

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

Затем, когда вы идете на импорт, используйте:

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

Затем вы можете проверить Dictionary для соответствующих метаданных и используйте эту конкретную платформу во время выполнения.

Кроме того, вы можете создать пользовательский интерфейс для строго типизированных метаданных (вместо строк).Подробнее см. Экспорт и метаданные .

...