1

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

例如

Lazy<ITheExpensiveService>();

我知道使用 Lazy 时, value 属性是创建昂贵对象的单点。

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

这与 Func 的工作方式有什么关系,因为这与惰性创建无关?

4

1 回答 1

1

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

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

对于 func 这个:

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

所以这里唯一的区别是惰性包装函数。

func 与lazy 有何不同?

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

于 2014-12-12T12:37:37.270 回答