我注意到,在创建昂贵对象的示例中,StructureMap 可以使用 Lazy 或 Func 类型延迟创建接口。
例如
Lazy<ITheExpensiveService>();
我知道使用 Lazy 时, value 属性是创建昂贵对象的单点。
StructureMap 是在这里做一些特别的事情,还是只是使用 .NET 中已有的功能?
这与 Func 的工作方式有什么关系,因为这与惰性创建无关?
我注意到,在创建昂贵对象的示例中,StructureMap 可以使用 Lazy 或 Func 类型延迟创建接口。
例如
Lazy<ITheExpensiveService>();
我知道使用 Lazy 时, value 属性是创建昂贵对象的单点。
StructureMap 是在这里做一些特别的事情,还是只是使用 .NET 中已有的功能?
这与 Func 的工作方式有什么关系,因为这与惰性创建无关?
StructureMap 在使用 Lazy 时没有做任何特别的事情。当解决惰性依赖时,它只是做这样的事情:
new Lazy<TPluginType>(() => container.GetInstance<TPluginType>()
对于 func 这个:
() => container.GetInstance<TPluginType>()
所以这里唯一的区别是惰性包装函数。
func 与lazy 有何不同?
当您创建Lazy{T}的对象时,您提供对象工厂方法作为 func。因此,当您在属性 Value 上使用lazy.Value时,您在构造函数中提供的 getter 仿函数将被执行,因此实际上它使用 func 来延迟初始化。