Lazy< T, TMetaData>→TMetaData> Lazy<动态;没有实例化

本文关键字:TMetaData Lazy 实例化 动态 gt | 更新日期: 2023-09-27 18:12:39

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

我希望设置一个可组合部件的大集合,但我不喜欢实例化它们,直到它们实际被请求。(请参阅我的相关问题:MEF,为什么一个相同的副本和相同的导出插件创建?

Lazy< T, TMetaData>→TMetaData> Lazy<动态;没有实例化

你应该能够做到这一点,使用如下:

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

不幸的是,我手头没有MEF,所以如果你有任何编译问题,请告诉我。请注意,lazy.Value是在委托中传递的,因此直到需要时才计算。