C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

article/2025/9/15 1:53:27

 在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架)。单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架,MSDN中对MEF有这样一段说明:

  Managed Extensibility Framework 或 MEF 是一个用于创建可扩展的轻型应用程序的库。 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置。 扩展开发人员还可以利用该库轻松地封装代码,避免生成脆弱的硬依赖项。 通过 MEF,不仅可以在应用程序内重用扩展,还可以在应用程序之间重用扩展。

  废话不多说了,想了解更多关于MEF的内容,到百度上面查吧!

  MEF的使用范围广泛,在Winform、WPF、Win32、 Silverlight中都可以使用,我们就从控制台说起,看看控制台下如何实现MEF,下面先新建一个win32控制台项目MEFDemo,添加一个 IBookService接口,写一个简单的Demo:

 

IBookService内容如下:

复制代码
using System;
using System.Collections.Generic;
using System.Linq; using System.Text; namespace MEFDemo { public interface IBookService { string BookName { get; set; } string GetBookName(); } }
复制代码

 

下面添加对System.ComponentModel.Composition命名空间的引用,由于在控制台程序中没有引用这个DLL,所以要手动添加:

点击OK,完成添加引用,新建一个Class,如:MusicBook继承IBookService接口,代码如下:

复制代码
using System;
using System.Collections.Generic;
using System.Linq; using System.Text; using System.ComponentModel.Composition; namespace MEFDemo { [Export(typeof(IBookService))] public class MusicBook : IBookService { public string BookName { get; set; } public string GetBookName() { return "MusicBook"; } } }
复制代码

Export(typeof(IBookService)) 这句话将类声明导出为IBookService接口类型。

然后修改Porgram中的代码如下:

复制代码
using System;
using System.Collections.Generic;
using System.Linq; using System.Text; using System.Reflection; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; namespace MEFDemo { class Program { [Import] public IBookService Service { get; set; } static void Main(string[] args) { Program pro = new Program(); pro.Compose(); if (pro.Service != null) { Console.WriteLine(pro.Service.GetBookName()); } Console.Read(); } private void Compose() { var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); CompositionContainer container = new CompositionContainer(catalog); container.ComposeParts(this); } } }
复制代码

这里使用[Import]导入刚刚导出的MusicBook,下面的Compose方法,实例化CompositionContainer来实现组合,点击F5运行,结果如下:

可以看到调用了MusicBook类的GetBookName方法,但是我们并没有实例化MusicBook类,是不是很神奇呢???

这一就是实现了主程序和类之间的解耦,大大提高了代码的扩展性和易维护性!

 转自:http://www.cnblogs.com/yunfeifei/p/3922668.html

转载于:https://www.cnblogs.com/opop/p/5512429.html


http://chatgpt.dhexx.cn/article/THxiIxkR.shtml

相关文章

【C#进阶系列】【MEF框架(一)】

C#进阶系列 第一章 【C#进阶系列】【MEF框架(一)】 文章目录 C#进阶系列前言一、MEF介绍二、为什么要用MEF三、MEF的概念四、使用示例五、MEF框架的好处六、源码链接总结 前言 这里对MEF作了基本的介绍,包括使用了一个特定场景(…

【虚拟化生态平台】平台架构图思路和实现细节

设计思路 我需要一个内网生态,通过一个nginx访问到我所有的资源,内部实现细节我不关心,那么就需要一个nginx服务器来负载所有的服务服务器太多了,我不想一个个的记录ip去登录,那我就需要一个跳板机来记录我的服务器&a…

ARM平台的虚拟化介绍

本篇博文主要介绍虚拟化的基本思想以及在arm平台如何做虚拟化,arm提供的硬件feature等等。 虚拟化技术简介 虚拟化技术 虚拟化是一个概念,单从这个概念的角度来看,只要是用某一种物品去模拟另一种物品都可以称为虚拟化,甚至于有…

ARMv8虚拟化

1 概述 2 虚拟化简介 3 AArch64虚拟化 4 Stage-2地址转换 5 指令的陷入和模拟 6 虚拟化异常 7 虚拟化通用定时器 8 虚拟化主机扩展 9 嵌套虚拟化 10 安全空间的虚拟化 11 虚拟化的成本 12 小测验 13 其它参考文章 14 接下来的计划 1 概述 本文描述了ARMv8-64的虚…

虚拟化服务器环境搭建方案,虚拟化环境建设方案

虚拟化环境建设方案 市场背景: 随着IT技术的飞速发展,基础传统IT架构模式下的应用规模扩大,需要更多的服务器来支持业务的发展,同时出现了如下几个问题: 1.资源利用率低、闲置率高,运行效率低 2.应急处理响应时间慢、服务保障差 3.运行维护成本高 虚拟化的出现很好的解决…

搭建vmware虚拟化平台的基础配置,以及Hadoop平台的搭建

需要准备的东西: vmware workstations centos.iso hadoop3.3.0 mobaxterm/xshell/pietty/winscp jdk的tar包 第一步 : 安装centos操作系统 第二步 : 克隆虚拟机(也可以在hadoop安装后再克隆) 我们这里需要选择完整克隆…

WSL2 请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化

bcdedit /set hypervisorlaunchtype autoC:\WINDOWS\system32>bcdedit /set hypervisorlaunchtype auto 操作成功完成。

嵌入式虚拟化平台jailhouse踩坑笔记

目录 简介 相关论文 架构 jailhouse的应用示例 jailhouse 官方demo jailhouse的运行 jailhouse none-root cell中挂载nfs作为根目录启动linux 注意事项 jailhouse的配置 1.cell配置文件简介 2. cell文件的生成过程 2. .c配置文件内容解析 QEMU中实现jailhouse的…

搭建华为FusionCompute虚拟化平台

最小实验要求:两台服务器 1、通过BMC口安装CNA操作系统 远程光驱安装CNA,需要设置服务器从远程光驱启动,然后进入BIOS可以查看BMC控制台的用户名和密码,以及IP,一般服务器都默认有。然后登陆BMC的控制台,进…

服务器虚拟化 涉密,面向高安全服务器虚拟化领域应用研制的安全保密虚拟化平台...

中标麒麟服务器虚拟化系统是基于中标麒麟虚拟化平台软件V7,面向高安全服务器虚拟化领域应用研制的安全保密虚拟化平台;产品通过国家保密科技测评中心基于《涉密信息系统服务器虚拟化和桌面虚拟化产品安全保密技术要求》(BMB30-2017)的安全性检测。支持海…

VA虚拟平台十大亮点

VA虚拟平台十大亮点 一、自适应多种安装环境、并可以手动调整二、兼容互联网上主流动态域名自动连接,并有自主的动态域名解析。三、系统稳定性有效保障和看门狗机制四、高级参数最大限度保障程序兼容性五、智能打印-动态调整、实时预览、多页排版、自动打印六、向下…

Linux虚拟化平台检测

如果要找出 Linux 系统运行在虚拟化平台中还是硬件服务器上,有多种方式可供大家选择,这主要取决于你的 hypervisor 或 container 环境。不同的虚拟化或容器技术会在其实例中引入不同的识别指纹,如:处理器厂商、特殊的 /proc 文件或…

虚拟化平台PVE(ProxmoxVirtual Environment)安装部署

PVE是一个完整的企业虚拟化开源平台。通过内置的web界面,可以轻松地管理虚拟机和容器、软件定义的存储和网络、高可用性集群和多个开箱即用的工具。 官方:Proxmox - Powerful open-source server solutions 部署前准备 1.下载镜像,并刻录到U…

云平台管理与部署---虚拟化平台-----KVM

第一,搭建KVM服务器 1,虚拟化平台的安装 # yum -y install qemu-kvm libvirt-daemon libvirt-client libvirt-daemon-driver-qemu # systemctl start libvirtd # ls /etc/libvirt/qemu # ls /var/lib/libvirt/images/ 第二,管理KVM平台 1…

云计算-华为虚拟化平台FusionCompute

目录 FusionCompute产品介绍 FusionCompute虚拟化套件 FusionCompute产品定位 FusionCompute在虚拟化套件中位置 FusionCompute产品架构 FusionCompute模块功能模块 ​编辑FusionCompute产品功能 - 虚拟化计算 FusionCompute产品功能 - 虚拟化存储 FusionCompute产品功…

服务器虚拟化如何分配内存,VMware虚拟化平台内存如何管理?

当运行一个虚拟机时,vSphere的VMKernel为虚拟机生成一段可编址的连续内存,与普通操作系统提供给上层应用使用的内存具有相同的属性特征。引入内存虚拟化之后,同样的内存地址空间,允许VMkernel同时运行多个虚拟机并保证它们之间使用内存的独立性。 虚拟化平台三种内存模式 主…

Linux部署KVM虚拟化平台

了解KVM: Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为…

综合虚拟试衣平台

【摘要】 综合虚拟试衣平台是一个完整的虚拟试衣体验系统,拥有电子商城、线下虚拟试衣设备、核心SAAS平台三个模块。人们可以在线上线下,通过鼠标选择场景、人物、衣物自动生成试衣动画,或是通过摄像头摆拍实时获取。用户可通过此平台体验从…

VMware ESXi-虚拟化平台的搭建

前言:vSphere 是VMware公司推出一套服务器虚拟化解决方案,其核心组件为 VMware ESXi 和VMware vCenter,本文简单介绍VMware ESXi 的安装使用。 它与我们常用的虚拟机不同的是,日常使用的虚拟机是需要依赖于一个操作系统的&#xf…

虚拟仿真实验平台服务器需求,虚拟仿真实验中心平台建设方案.pptx

虚拟仿真实验中心平台建设方案.pptx 一,二,三,虚拟仿真实验概述,虚拟仿真实验教学,虚拟仿真实验中心建设,一,二,三,虚拟仿真实验概述,虚拟仿真实验教学,虚拟仿真实验中心建设,,随着计算机、互联网等先进技术的迅速发展和大面积普及推广,虚拟仿真实验应运而生。虚拟仿真实验改变…