C#中Plugin的实践

Plugin是一种相当灵活的可扩充、模块化机制,微软的Application Block不少采用了Plugin结构,本文讨论Plugin在C#中的一种实践。
Plugin是基于统一的接口,在C#中采用Reflection机制产生实现IPlugin的对象。假定接口为IPlugin,以下代码块示意动态产生IPlugin对象的代码段,其中dllName是实现IPlugin接口类的dll文件名:
public IPlugin LoadPlugin(string dllName)
{
Assembly asm = AppDomain.CurrentDomain.Load(dllName);
foreach(Type t in asm.GetTypes()) {
foreach(Type iface in t.GetInterfaces()) {
if(iface.Equals(typeof(IPlugin))) {
return (System.Activator.CreateInstance(t)) as IPlugin;
}
}
}
return null;
}

Java也有Reflection机制,实现Plugin也很简单,大致是(IPlugin)Class.forName(className).newInstance()的样子。C++由于Reflection机制,可以采用DLL模拟,在DLL中export一个全局函数和interface,该全局函数返回实现了接口的对象的指针。

微软有关于Provider Pattern的文章,文中提供了另一种C#可以带参数的实例化方法。

时间: 2024-10-27 05:03:46

C#中Plugin的实践的相关文章

DockOne微信分享(一二六):Kubernetes在微服务化游戏中的探索实践

本文讲的是DockOne微信分享(一二六):Kubernetes在微服务化游戏中的探索实践[编者的话]随着Kubernetes的持续火热,那在线游戏领域又将如何使用,又将碰到哪些问题,以及带来哪些价值? 本次分享将为大家介绍微服务化架构游戏领域中,Kubernetes支撑技术方案选型,功能优化以及实践过程中的一些思考. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volu

Weex在千牛开放中的应用实践

摘要:在2017年1月12日 Weex Conf 2017上,阿里巴巴商家事业部无线千牛团队的无灵结合阿里巴巴无限商家端的实际业务分享了Weex在千牛开放中的应用实践,本文分享了面对业务的各种挑战,无线千牛团队是如何一步步转向Weex的,以及在实际过程中遇到挑战和所做的努力.本文是无灵关于Weex在千牛开放中的应用实践的分享整理. 本文整理自演讲嘉宾的分享视频以及PPT. 本次分享将主要介绍Weex在千牛开放平台中的一些应用实践,今天分享的内容主要分为以下四个部分: 千牛当前的业务场景与挑战 为

经典的4P营销理论中,价格算是营销中较难实践和评价的一环

在经典的4P营销理论中,价格算是营销中较难实践和评价的一环.一方面,因为当今时代的营销工作被极度细分,价格这种全局性.战略性的工作被切割得很细碎,很难理清头绪:另一方面,价格本身充满了诡异,不是简单基于成本和竞争而定价,而且涉及众多心理因素. 十种价格"诡计" 在<无价>当中,作者威廉•庞德斯通阐述了若干种价格的"诡计"(这里的价格包括产品.服务的价格.也包括人的薪水等). 1.隐性涨价:品牌通常不用直接涨价,而通过减少分量来隐性涨价.比如让包装底部故意

PyODPS开发中的最佳实践

PyODPS 支持用 Python 来对 MaxCompute 对象进行操作,它提供了 DataFrame API 来用类似 pandas 的接口进行大规模数据分析以及预处理,并且可以用 ml 模块来执行机器学习算法. 现在为了让大家能更好地使用 PyODPS,我们总结开发过程中的最佳实践,来让大家更高效地开发 PyODPS 程序.当然,希望大家能一起来帮助我们来完善总结. 注:公共云由于未支持 Python UDF,因此本文中提到的自定义函数功能包括 apply 和 map_reduce 等功

AngularJS 中的指令实践开发指南(一)_AngularJS

指令(Directives)是所有AngularJS应用最重要的部分.尽管AngularJS已经提供了非常丰富的指令,但还是经常需要创建应用特定的指令.这篇教程会为你讲述如何自定义指令,以及介绍如何在实际项目中使用.在这篇文章的最后(第二部分),我会指导你如何使用Angular指令来创建一个简单的记事本应用. 概述 一个指令用来引入新的HTML语法.指令是DOM元素上的标记,使元素拥有特定的行为.举例来说,静态的HTML不知道如何来创建和展现一个日期选择器控件.让HTML能识别这个语法,我们需要

AngularJS中的指令实践开发指南(二)_AngularJS

在AngularJS中的指令实践指南(一)中给大家介绍了,如何隔离一个指令的scope.第二部分将承接上一篇继续介绍.首先,我们会看到在使用隔离scope的情况下,如何从指令内部访问到父scope的属性.接着,我们会基于对 controller 函数和 transclusions 讨论如何为指令选择正确的scope.这篇文章的最后会以通过一个完整的记事本应用来实践指令的使用. 隔离scope和父scope之间的数据绑定 通常,隔离指令的scope会带来很多的便利,尤其是在你要操作多个scope模

小米崔建伟答疑HBase在小米中的应用实践

2014年3月25日,CSDN在线培训:HBase在小米中的应用实践圆满结束,本次培训讲师是来自小米的崔建伟,他表示随着小米业务的逐渐扩展,特别是大数据时代的到来,原有的关系型数据库MySQL已经逐渐无法满足需求,因此向NoSQL迁移是很自然的事情. CSDN在线培训是专为广大技术从业人员准备的在线实时互动技术培训,邀请各个行业一线技术工程师分享他们工作中遇见的各种问题以及解决方案,同时给大家带来一些新技术.思路.解决方案! CSDN在线培训以"经典性.实战性.系统性.前瞻性.专业性"

JavaScript Event Loop机制详解与Vue.js中nextTick的实践应用

本文依次介绍了函数调用栈.MacroTask 与 MicroTask 执行顺序.浅析 Vue.js 中 nextTick 实现等内容;本文中引用的参考资料统一声明在 JavaScript 学习与实践资料索引. 1. 事件循环机制详解与实践应用 JavaScript 是典型的单线程单并发语言,即表示在同一时间片内其只能执行单个任务或者部分代码片.换言之,我们可以认为某个同域浏览器上下中 JavaScript 主线程拥有一个函数调用栈以及一个任务队列(参考 whatwg 规范);主线程会依次执行代码

快速迭代的开发方式中的QA实践方法

背景 尽管"小步快跑"的快速迭代开发方式早已成为互联网软件开发的主流指导思想,但大量开发团队在落地这一开发方式时最常遇到的问题就是"如何QA",因为,传统软件行业的QA方式(手动测试,回归测试等)无法适应每天多次上线的迭代节奏.这时,开发团队往往会面临这两种窘境: 要么是为了速度不顾质量,导致线上故障频发:要么是为了质量而固定发布窗口,导致业务不够敏捷. 那么,在快速迭代的开发方式下,究竟应该采用怎样的QA实践才既能控制住风险又能跟上节奏? 本文对小博无线技术团队在