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

相关文章

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

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

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