懒惰<t,tmetadata =“”> - &gt; Lazy <dynamic,tmetadata =“”>没有实例化?</dynamic,> </t,>

时间:2013-05-07 10:27:04

标签: c# plugins dependency-injection inversion-of-control mef

我使用MEF并撰写部分并获得多个IEnumerable<Lazy<IFoo, IMetaData>>(我有几个导入)。我喜欢将所有组成的部分合并到一个类型为IEnumerable<Lazy<dynamic, IMetaData>>的集合中。如果没有调用/实例化实现IFoo或其他接口的实际对象,这是否可能?

我希望设置一个可组合部分的大集合,但我不想在实际请求之前实例化它们。 (请参阅我的相关问题:MEF, why are identical duplicates of one and the same exported plugin created?

1 个答案:

答案 0 :(得分:1)

您应该可以通过使用以下内容来实现:

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

不幸的是我手头没有MEF所以如果您有任何编译问题请告诉我。请注意,lazy.Value在委托中传递,因此在需要之前不会进行评估。