MEF(Managed Extensibility Framework)快速入门与实战Demo
MEF(Managed Extensibility Framework)快速入门与实战Demo
一、什么是 MEF?
MEF,全称 Managed Extensibility Framework,是 .NET 提供的一个模块化依赖注入框架。
它最大的特点就是 —— 让程序能够动态发现和加载模块,而无需在代码中显式引用具体实现类。
可以理解为:
你只定义“接口”和“能力”,实现类可以来自任何地方(甚至是单独的DLL插件),程序会自动把它们装配起来。
说人话:
你只要实现某个接口,在你的实现类上面做Export标记,程序启动时将会找到这些实现并自动执行,可选择全部执行还是只执行第一个。
二、MEF 的核心概念
| 关键特性 | 说明 |
|---|---|
[Export] |
把一个类标记为可被“导出”(即别人可以引用) |
[Import] / [ImportMany] |
声明一个依赖(由 MEF 自动注入) |
CompositionContainer |
MEF 的“依赖容器”,负责扫描和装配 |
PartCreationPolicy |
控制生命周期(Shared / NonShared) |
三、简单示例思路
我们想做一个简单的架构:
最终目标:
-
启动程序后,自动发现并启动所有实现了
IServiceController的模块。 -
可以方便扩展其他模块,比如 CameraService、PlcService 等。
四、完整代码示例
📁 目录结构:
🧠 1️⃣ 定义接口(Contracts)
⚙️ 2️⃣ 实现服务(Services)
🔩 3️⃣ 服务控制器(ServiceController)
🧭 4️⃣ 启动器(Startup)
🚀 5️⃣ 主程序(Program)
五、运行效果
六、总结与思考 💡
| 优点 | 缺点 |
|---|---|
| ✅ 完全解耦,模块可独立更新或热插拔 | ❌ 不支持复杂的生命周期管理 |
| ✅ 无需手动注册类型 | ❌ 性能略逊于主流 IoC |
| ✅ 非常适合插件化、服务化结构 | ❌ 不支持构造函数链式注入(需要导入属性或构造标记) |
MEF 是一种轻量、原生、面向插件的依赖注入机制。
如果项目需要“自动发现模块 + 松耦合扩展”,它非常适合。

浙公网安备 33010602011771号