封装:MEF组件式框架封装

2024-05-26 16:58
文章标签 封装 组件 框架 mef

本文主要是介绍封装:MEF组件式框架封装,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介:MEF框架是用于创建可扩展的轻型应用程序的库;


二、目的:对原生结构进行封装方便使用;

三、实现步骤:

 1、定义接口

    public interface IMefDemoBase{void Init();}

2、实现接口和特性

    /// <summary> ① 必须拥有Export特性  [Export(typeof(IMefDemoBase))] </summary>[Export(typeof(IMefDemoBase))]public class MefDemoBase : IMefDemoBase{public void Init(){throw new NotImplementedException();}}


3、 构建组件集合

    /// <summary> 提供构建组件集合 </summary>public class MefEntityProvider<T>{// ② 必须拥有Export特性  [Export(typeof(IMefDemoBase))][ImportMany]List<T> doList;/// <summary> 获取所有接口 </summary>public List<T> DoList{get { return doList; }set { doList = value; }}/// <summary> 通过一组应用程序集创建一个MefEntityProvider </summary>public static MefEntityProvider<T> CreateInstance(List<Assembly> asses){//  ③ 必须拥有Export特性  [Export(typeof(IMefDemoBase))]MefEntityProvider<T> provider = new MefEntityProvider<T>();var catalog = new AggregateCatalog();asses.ForEach(l => catalog.Catalogs.Add(new AssemblyCatalog(l)));var _container = new CompositionContainer(catalog);_container.ComposeParts(provider);return provider;}/// <summary> 通过一个应用程序集创建一个MefEntityProvider </summary>public static MefEntityProvider<T> CreateInstance(Assembly ass){MefEntityProvider<T> provider = new MefEntityProvider<T>();var catalog = new AggregateCatalog();catalog.Catalogs.Add(new AssemblyCatalog(ass));var _container = new CompositionContainer(catalog);_container.ComposeParts(provider);return provider;}}

四、实现实例

    class Program{static void Main(string[] args){List<Assembly> ass = new List<Assembly>();ass.Add(Assembly.GetEntryAssembly());MefEntityProvider<IMefDemoBase> provider = MefEntityProvider<IMefDemoBase>.CreateInstance(ass);provider.DoList.ForEach(l => Console.WriteLine(l.ToString()));Console.Read();MefEntityProvider<IDisposable> provider1 = MefEntityProvider<IDisposable>.CreateInstance(ass);provider1.DoList.ForEach(l => Console.WriteLine(l.ToString()));Console.Read();}}

注:此结构会在加载的程序集中自动找到自定义的接口,实现动态加载

五、设计结构图


这篇关于封装:MEF组件式框架封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005050

相关文章

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)

《Java导入、导出excel用法步骤保姆级教程(附封装好的工具类)》:本文主要介绍Java导入、导出excel的相关资料,讲解了使用Java和ApachePOI库将数据导出为Excel文件,包括... 目录前言一、引入Apache POI依赖二、用法&步骤2.1 创建Excel的元素2.3 样式和字体2.