MEF系列五:导入延迟
2013-12-31 15:21
155 查看
Lazy Exports
During composition of a part, an import will trigger the instantiation of a part (or parts) that expose the necessary exportsrequired for the original requested part. For some applications delaying this instantiation – and preventing the recursive composition down the graph – may be an important factor to consider as creation a long and complex graph of objects can be expensive
and unnecessary.
This is the motivation for MEF to support what we call lazy exports. In order to use it all you need to do is to import an [System.Lazy<T>] instead
of [T] directly.
For example, consider the code snippet bellow:
public class HttpServerHealthMonitor { [Import] public IMessageSender Sender { get; set; }
The code above imports states that it depends on a contract (IMessageSender) implementation. When MEF supply this dependency
it will need to also create the IMessageSender selected and recursively the dependencies that the implementation might have.
In order to turn this import to be lazy, you just need to replace it by and Lazy<IMessageSender>:
[Export] public class HttpServerHealthMonitor { [Import] public Lazy<IMessageSender> Sender { get; set; }
In this case you are opt-in for delaying this instantiation until you actually need the implementation instance. In order to
request the instance, use the property[Lazy<T>.Value].
http://mef.codeplex.com/wikipage?title=Lazy%20Exports&referringTitle=Guide
相关文章推荐
- 我学MEF系列(2):导入(Import)和导出(Export)
- MEF: MSDN 杂志上的文章(12) 导入延迟导出和访问元数据
- 我学MEF系列(3):导入(Import)和导出(Export) (续)
- MEF系列四:声明导入(Imports)
- MVC系列学习(三)-EF的延迟加载
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- PE文件结构详解(五)延迟导入表
- Docker系列(二)镜像下载、操作容器、镜像导入导出等操作
- TCP的ACK确认系列 — 延迟确认
- Docker系列~在 docker之间导出导入镜像(九)
- 导入VMware虚拟机磁盘格式的选择(厚置备延迟置零、厚置备置零、thin)
- mybatis系列-14-延迟加载
- [导入]数据库设计技巧系列(五)——各种小技巧
- PE文件结构详解(五)延迟导入表
- 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- 我学MEF系列(8):MEF+Unity实现可扩展拦截器
- EF之POCO应用系列3——延迟加载
- Web性能优化系列(3):如何延迟加载JS