2013-05-07 2 views
0

Я использую MEF и составляю детали и получаю несколько IEnumerable<Lazy<IFoo, IMetaData>> (у меня есть несколько импортных товаров). Мне нравится объединить все составные части в одну коллекцию типа IEnumerable<Lazy<dynamic, IMetaData>>. Это возможно без вызова/создания экземпляров реальных объектов, реализующих IFoo или других интерфейсов?Lazy <T, TMetaData> -> Lazy <dynamic, TMetaData> без создания экземпляра?

Я смотрю, как настроить большую коллекцию составных частей, но мне не нравится создавать их, пока они не будут запрошены. (Пожалуйста, смотрите мой родственный вопрос: MEF, why are identical duplicates of one and the same exported plugin created?

ответ

1

Вы должны быть в состоянии сделать это, используя что-то вроде:

from enumerable in enumerables 
from lazy in enumerable 
select new Lazy<dynamic, IMetaData>(() => lazy.Value, lazy.Metadata) 

К сожалению у меня нет MEF под рукой так, пожалуйста, дайте мне знать, если вы будете иметь любую подборку Обратите внимание, что lazy.Value передается делегату и поэтому не оценивается до тех пор, пока не понадобится.

+0

Спасибо за ваш ответ, он решает мою проблему, хотя я получил доступ к контейнеру, который содержит экспортированные части напрямую, и поэтому мне не приходилось работать с динамика, которая делает решение сильно типизированным. Большое спасибо –