为什么Lazy <t>和Func <t>依赖关系在StructureMap中实现相同</t> </t>

时间:2014-12-11 10:56:52

标签: structuremap structuremap3

我注意到在创建昂贵对象的示例中,StructureMap可以使用接口的Lazy或Func类型推迟创建。

e.g。

Lazy<ITheExpensiveService>();

据我所知,对于Lazy,value属性是创建昂贵对象的单点。

StructureMap在这里做了一些特别的事情,还是只使用.NET中的功能?

这与Func的工作原理有何关系,因为这与懒惰创作无关?

1 个答案:

答案 0 :(得分:1)

使用Lazy时,StructureMap没有做任何特别的事情。在解决延迟依赖时,它只是做这样的事情:

new Lazy<TPluginType>(() => container.GetInstance<TPluginType>()

对于func这个:

() => container.GetInstance<TPluginType>()

所以这里唯一的区别就是lazy wraps func。

func与懒惰有什么不同?

当您创建 Lazy {T} 的对象时,您将对象工厂方法提供为func。因此,当您在属性上使用 lazy.Value 时,您将在构造函数中提供的值getter仿函数执行,因此实际上它使用func来推迟初始化。

相关问题