我注意到在创建昂贵对象的示例中,StructureMap可以使用接口的Lazy或Func类型推迟创建。
e.g。
Lazy<ITheExpensiveService>();
据我所知,对于Lazy,value属性是创建昂贵对象的单点。
StructureMap在这里做了一些特别的事情,还是只使用.NET中的功能?
这与Func的工作原理有何关系,因为这与懒惰创作无关?
答案 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来推迟初始化。