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].属性。

  • 相关阅读:
    免费的Office批量打印工具 Word、Excel、PDF批量打印
    PHP数据库批量去注释、删字段
    SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】
    CentOS 安装 nginx-1.19.4 与原版本共存
    毕业5年之——上个五年计划复盘20210919
    ubunt 20.04 有道词典命令行工具
    java中针对 try,catch和finally一些总结
    Linux find命令与cp命令连用
    MySQL基本操作笔记
    挖矿病毒排查
  • 原文地址:https://www.cnblogs.com/wangchunming/p/2490876.html
Copyright © 2011-2022 走看看