zoukankan      html  css  js  c++  java
  • 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].属性。

  • 相关阅读:
    MySQL Unknown table engine 'FEDERATED''
    Meta http-equiv属性与HTTP头的Expires中(Cache-control)详解
    EChart 标题 title 样式,x轴、y轴坐标显示,调整图表位置等
    手机端个人信息模板
    <c:forEach>, <c:forTokens> 标签
    html select 可输入 可编辑
    js写评价的星星
    指数映射
    刚体转动的稳定性
    物理引擎中的刚体转动2
  • 原文地址:https://www.cnblogs.com/wangchunming/p/2490876.html
Copyright © 2011-2022 走看看