C#面试题更新 2026-08-05

请解释 .NET 中托管扩展性框架(MEF)的概念,并阐述如何使用该框架构建可扩展的应用程序。

风险判断系统设计技术原理C#.NET

考察说明

考查对 .NET 可扩展性框架 MEF 的理解及其在构建可扩展应用中的实际应用。

回答思路

  1. 【回答框架 1】MEF(Managed Extensibility Framework)是 .NET 中用于实现依赖注入和组合的库,通过特性(如 [Import] 和 [Export])声明依赖关系,由容器自动解析并组装部件,无需硬编码对象创建。
  2. 【回答框架 2】MEF 的核心概念包括部件(Part)、目录(Catalog)和容器(CompositionContainer)。部件通过 [Export] 暴露服务,通过 [Import] 声明所需依赖,目录负责发现部件,容器执行组合并管理生命周期。
  3. 【回答框架 3】实现可扩展应用的步骤:定义接口(如 IPlugin),在宿主中 [Import] 该接口,通过 DirectoryCatalog 指定插件目录,创建容器并调用 ComposeParts 完成组合。
  4. 【回答框架 4】MEF 支持多种目录类型,如 AssemblyCatalog 和 DirectoryCatalog,可动态加载外部程序集。此外,MEF 2(System.ComponentModel.Composition)提供更简洁的 API 和更好的性能。
  5. 【回答框架 5】实际使用时需考虑异常处理(如组合失败)、部件生命周期(共享或非共享)以及性能开销,并合理规划目录扫描范围。
  6. 【关键点 1】MEF 通过特性驱动([Export]/[Import])实现松耦合的依赖注入。
  7. 【关键点 2】组合容器是核心,负责匹配导入和导出,并管理部件实例。
  8. 【关键点 3】使用 DirectoryCatalog 可轻松扩展新功能,无需重新编译宿主程序。
  9. 【关键点 4】MEF 不同于普通 DI 容器,更侧重模块化和运行时扩展。
  10. 【易错点 1】组合失败时可能需要显式处理 CompositionException,否则应用启动可能中断。
  11. 【易错点 2】过度使用可能导致性能下降,需控制目录扫描范围和部件粒度。
  12. 【易错点 3】不适用于所有场景,简单应用可能更适合轻量级 DI 容器。