MEF学习笔记(5):迟延加载导出部件

迟延加载导出部件

MEF中使用导出与导入,实质上就是对一个对象的实例化的过程,通过MEF的特性降低了对象的直接依赖,从而让系统的设计达到一种高灵活、高扩展性的效果。在具体的设计开发中,存在着某些对象是不需要在系统运行或者的附属对象初始化的时候进行实例化的,仅仅只需要在需要使用到他的时候才会进行实例化,从系统的上来说这也是提高系统性能的一种可行的实现方式,这种方式就可以理解为对象的迟延初始化,或者叫迟延加载。MEF也对此使用场景提供了完善的实现机制,下面来看看在MEF中的迟延初始化是如何使用的。为了使用它,我们所需要做的是导入使用[System.Lazy<T>]来直接代替[T]。例如,思考一下下面的代码段

public class HttpServerHealthMonitor
{
    [Import]
    public IMessageSender Sender { get; set; }

上面的导入代码说明它依赖于一个契约(IMessageSender)实现。当MEF提供这种依赖性,它也需要创建IMessageSender去选定和递归可能的实现。
为了使这个导入实现迟延加载,你只需要用Lazy<IMessageSender>替换它就行了。

[Export]
public class HttpServerHealthMonitor
{
    [Import]
    public Lazy<IMessageSender> Sender { get; set; }

在这个例子里,你可以选择性去迟延实例化,直到你真的想去实现实例。想要请求实例,使用[Lazy<T>.Value].属性。

原文地址:https://www.cnblogs.com/wangchunming/p/2490876.html