有关于开发具有Add-Ins功能的程序一切。代码,设计模式,理论文章,开发心得!

解决方案 »

  1.   

    add-in,最好的例子就是java的哪个ide。
    还有一个java的plugin framework:http://jpf.sourceforge.net/我以前实现的一个:1.IPlugin──任何插件需要实现的接口。放在单独的Project中,以便于其它Project引用。Execute方法执行动作,Dispose方法则终止执行且释放资源。2.IAppContext──插件以此来了解其运行环境。PluginManager将此类型的对象传递给IPlugin的Execute方法。3.PluginAssemblyAttribute──描述插件程序集的属性,比如此插件所从属的模块,插件类的名字。4.PluginDependencyAttribute──描述插件类的属性,指明所依赖的其它插件。5.PluginManager──插件管理类,继承MarshalByRefObject类。负责加载,执行,停止和删除插件。为每个模块的插件创建一个AppDomain,以按照模块来隔离插件。6.PluginDescriptor──插件的包装类,负责将按照插件之间的依赖关系进行排序,以便于PluginManager按照正确的顺序加载插件。7.PluginSecurityManager──插件安全管理类。负责检查插件的合法性,设置插件的执行权限。8.PluginProvider──插件提供者,继承MarshalByRefObject类。负责提供需要加载的插件的Assembly的列表。具体实现中可以读取配置找到插件,也可以自动发现插件。原本我设计了一个工厂,但由于我只是采用自动查找插件的方式,所以为了简化设计,就把这个工厂去掉了。PluginProvider创建一个临时的AppDomain来加载插件目录下的程序集,并读取其属性以检验此程序集中是否包含插件;返回包含插件的程序集的列表,最后卸载此临时AppDomain。9.DirectoryMonitor──监控部署插件的目录,一旦有新增加的插件,或者有新版本插件被部署后,就能立刻通知PluginManager进行处理。具体实现中通常使用代理了处理了。此类继承FileSystemWatcher类,使用中需要注意一些问题──同一个事件可能重复触发;一个文件拷贝动作会触发多个事件。10.        SoftwareDelivery──这个子系统负责进行系统部署,远程将插件部署到指定的各个客户端的某目录下。
    其它资料:
    http://www.codeproject.com/csharp/c__plugin_architecture.asp
    http://www.codeproject.com/csharp/extensibleui.asp
    http://www.codeproject.com/dotnet/PluginManagerClassBrk.asp
    http://www.codeproject.com/csharp/pluginsincsharp.asp
    http://www.codeproject.com/csharp/razorpt1.asp    这个比较强大
      

  2.   

    好像有一个开源的Addin csharpdeveloper
      

  3.   

    java的ide:eclipse
    .net的一个ide:csharpdeveloperhttp://www.cnblogs.com/noblepaul/archive/2004/06/11/14898.html