封装: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

相关文章

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

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