【问题标题】:Lazy<T, TMetaData> -> Lazy<dynamic, TMetaData> without instantiating?Lazy<T, TMetaData> -> Lazy<dynamic, TMetaData> 没有实例化?
【发布时间】:2013-05-08 12:54:12
【问题描述】:

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

我希望设置大量可组合部件,但我不喜欢在实际请求它们之前实例化它们。 (请看我的相关问题:MEF, why are identical duplicates of one and the same exported plugin created?

【问题讨论】:

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


    【解决方案1】:

    你应该可以通过使用类似的东西来做到这一点:

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

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

    【讨论】:

    • 感谢您的回答,它解决了我的问题,尽管我最终直接访问了包含导出部件的容器,因此我不必使用使解决方案强类型化的动态。非常感谢
    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 2011-03-13
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多