C#下的插件编程框架:MEF和MAF

MEF和MAF都是C#下的插件编程框架,我们通过它们只需简单的配置下源代码就能轻松的实现插件编程概念,设计出可扩展的程序。这真是件美妙的事情!

MEF(Managed Extensibility Framework)

MEF的工作原理大概是这样的:首先定义一个接口,用这个接口来约束插件需要具备的职责;然后在实现接口的程序方法上面添加反射标记“[Export()]”将实现的内容导出;最后在接口的调用程序中通过属性将插件加载进来。我们还是用代码来描述吧:

1. 定义一个接口:

/* 

    作者:GhostBear
    博客:http://blog.csdn.net/ghostbear
    简介:该节主要学习.net下的插件编程框架MEF(managed extensibility framework) 

 */

using System;  

using System.Collections.Generic;  

using System.Linq;  

using System.Text;  

using System.Windows;  

namespace chapter28_simplecontract  

{  

    public interface ICalculator  

    {  

        IList<IOperation> GetOperations();  

        double Operate(IOperation operation, double[] operands);  

    }  

    public interface IOperation  

    {  

        string Name { get; }  

        int NumberOperands { get; }  

    }  

    public interface ICaculatorExtension  

    {  

        string Title { get; }  

        string Description { get; }  

        FrameworkElement GetUI();  

    }  

}

2. 实现定义的接口(部分一)

    [Export(typeof(ICalculator))]  

    public class Caculator:ICalculator  

    {  

        public IList<IOperation> GetOperations()  

        {  

            return new List<IOperation>(){  

                new Operation{ Name="+",NumberOperands=2},  

                new Operation{Name="-",NumberOperands=2},  

                new Operation{Name="*",NumberOperands=2},  

                new Operation{Name="/",NumberOperands=2}  

            };  

        }  

        public double Operate(IOperation operation, double[] operands)  

        {  

            double result=0;  

            switch (operation.Name)  

            {   

                case "+":  

                    result = operands[0] + operands[1];  

                    break;  

                case "-":  

                    result = operands[0] - operands[1];  

                    break;  

                case "*":  

                    result = operands[0] * operands[1];  

                    break;  

                case "/":  

                    result = operands[0] / operands[1];  

                    break;  

                default:  

                    throw new Exception("not provide this method");  

            }  

            return result;  

        }  

}  

    public class Operation:IOperation  

    {  

        public string Name  

        {  

            get;  

            internal set;  

        }  

        public int NumberOperands  

        {  

            get;  

            internal set;  

        }  

    }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索接口
, 插件
, public
, result
, name
, operation
, windows框架插件net
, 插件框架 osgi mef
, getui
插件编程
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-09-18 16:20:06

C#下的插件编程框架:MEF和MAF的相关文章

opengl-OpenGL编程框架是怎样的?

问题描述 OpenGL编程框架是怎样的? 以winmain函数为入口,Opengl编程的框架是怎样的?(调试了实在还没弄懂) 解决方案 glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); //前面都是初始化 glutCreateWindow("第一个OpenGL程序")

请问windows的.net平台下比较好的轻量级插件式框架,哪个比较好?

问题描述 请问windows的.net平台下比较好的轻量级插件式框架,哪个比较好? 请问.net平台下比较好的轻量级插件式框架,哪个比较好? 比如SCSF,MEF等 解决方案 FireBreath还不错,可以试试啊

ASP.NET应用下基于SessionState的“状态编程框架”解决方案

在一个基于ASP.NET的Web应用程序中,我们通常使用SessionState保存基于某个客户端的状态信息.但是这种单纯使用SessionState的编程方式具有很多局限,比如Session Item的Key值冲突,比如没有一个有效的SessionState清除机制会为Web Server带来内存压力.为了实现对客户端状态的有效管理,并提高应用开发效率,在很多年前我们的开发框架体系中就具有相应的一个叫做State的编程框架.最近我开始对其进行升级和重新设计,将实现原理和概要设计方面的东西写出来

一起谈.NET技术,ASP.NET应用下基于SessionState的“状态编程框架”解决方案

在一个基于ASP.NET的Web应用程序中,我们通常使用SessionState保存基于某个客户端的状态信息.但是这种单纯使用SessionState的编程方式具有很多局限,比如Session Item的Key值冲突,比如没有一个有效的SessionState清除机制会为Web Server带来内存压力.为了实现对客户端状态的有效管理,并提高应用开发效率,在很多年前我们的开发框架体系中就具有相应的一个叫做State的编程框架.最近我开始对其进行升级和重新设计,将实现原理和概要设计方面的东西写出来

插件式框架开发的优势劣势

问题描述 插件式开发的优势不用说了,楼主有个工业上位机的小项目基本做得差不多了,和下位机用串口和以太网通信.现在想把两种通信做成主程序的插件(看起来高端也有其他好处)但是众所周知,插件是根据主程序的接口来实现的,我想问下这样可移植性不就低了吗?假如别的部门需要我的串口通信插件,他们的主程序得弄个跟我插件一样的接口先,对吗?另外我们后面想用第三方控件重做UI,UI层能用插件来优化更新吗?就是插件改变UI的意思插件也是继承接口的类库编成dll文件给别人用,那直接写一个类变成dll文件,别人用里面的方

初探Delphi中的插件编程

前言 我写Delphi程序是从MIS系统入门的,开始尝试子系统划分的时候采用的是MDI窗体的结构.随着系统功能的扩充,不断有新的子系统加入系统中,单个工程会变得非常大,每次做一点修改都要重新编译,单个工程的形式也不利于团队协作.为了提高工作效率,我希望利用DLL动态链接库的形式实现插件结构的编程. 插件结构的编程需要一个插件容器来控制各DLL的运行情况,将划分好的每个子系统安排到一个DLL库文件中.对每个DLL程序需要为容器预留接口函数,一般接口函数包括:启动调用DLL库的函数.关闭DLL库的函

.Net下的多线程编程

多线程是很多驾驭体系所具有的特性,它能大大提升程序的运行效率,因此多线程编程技艺为编程者遍及关切.眼前微软的.Net战略正进一步推进,各种相干的技艺正为盛大编程者所接纳,同样在.Net中多线程编程技艺具有 ... 多线程是很多驾驭体系所具有的特性,它能大大提升程序的运行效率,因此多线程编程技艺为编程者遍及关切.眼前微软的.Net战略正进一步推进,各种相干的技艺正为盛大编程者所接纳,同样在.Net中多线程编程技艺具有相称首要的地位.本文我就向大众介绍在.Net下进行多线程编程的基本办法和程序.开始

如何动态加载控件以及插件编程思想(C#)

编程|动态|加载|控件 关键词:动态加载,控件,插件 控件,在实现快速开发中起着非常重要的作用,它可以将某一特定功能封装起来,供可户程序员调用,更重要的是它还可以实现插件式开发,使软件的灵活性.可扩充性大大增强.在网络上,也有很多动态加载控件.动态调用类成员等的资料.下面,我就将动态加载控件总结一下,以供大家参考.(不过由于本人水平有限,不一定有参考价值,写出来一方面是为了总结自己,以求提高,另一方面也希望各为朋友看到我的不足,给我提出宝贵意见)一.动态加载控件 动态加载,最基本用到的就是反射机

【插件式框架探索系列】应用程序域(AppDomain)

应用程序域(AppDomain)已经不是一个新名词了,只要熟悉.net的都知道它的存在,不过我们还是先一起来重新认识下应用程序域吧,究竟它是何方神圣. 应用程序域 众所周知,进程是代码执行和资源分配的最小单元,每个进程都拥有独立的内存单元,而进程之间又是相互隔离的,自然而然,进程成为了代码执行的安全边界. 一个进程对应一个应用程序是一个普遍的认知,而.net却打破了这一惯例,因为它带来了应用程序域这一全新的概念,CLR可使用应用程序域来提供应用程序之间的隔离,而一个进程中可以运行多个应用程序域,