代码之家  ›  专栏  ›  技术社区  ›  Mike Webb

有没有一种方法可以让插件直接在C#中控制应用程序的某些部分?

  •  0
  • Mike Webb  · 技术社区  · 15 年前

    我有一个.NET2.0应用程序。我想做的是创建一个插件,以某种方式访问主应用程序。

    我的原因是我希望能够动态地向表单添加按钮和菜单项等内容,而不是有一个名为“插件”的菜单项来更新。这样我就可以在不再次发布整个应用程序的情况下向应用程序GUI添加内容。

    现在我可以想到两种方法。首先,我可以创建一个插件,它总是希望引用整个应用程序,包括所有表单。我可以让它访问我在表单中选择的任何项目,它可以添加控件或随意添加任何内容。这让我有点不安,但如果可以接受,请告诉我。

    我能想到的另一种方法是为主应用程序中的每个表单都提供某种接口,这样我就可以使用该接口访问应用程序中的当前表单。不过,我不知道如何实现这一点。

    所有的帮助,建议,网站参考和意见是赞赏的。

    4 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    8 年前

    在一定程度上,这取决于谁将编写您的插件,您是否信任它们,当插件出现问题时,用户的体验或数据会发生什么变化?

    小提琴手 http://www.fiddler2.com/fiddler2/ 是一个Web调试代理,它有一个插件模型,非常像您的首选——将所有内容都公开给插件编写器,希望它们不会出错。这使得编写Fiddler的扩展非常简单,但这确实意味着您需要小心。

    如果您对这种方法不满意,我建议您仔细研究可能有帮助的2.NET技术。

    第一个是System.AddIn命名空间 http://msdn.microsoft.com/en-us/library/gg145020.aspx . 此命名空间中的类型旨在帮助您创建支持加载项的应用程序。

    第二个是MEF http://mef.codeplex.com/ . 托管可扩展性框架是一个非常强大的API,用于描述应用程序需求,并允许您构建高度可扩展的应用程序。

    关于MEF和WinForms,请查看这个SO问题:

    Winforms with MEF

        2
  •  0
  •   TJB    15 年前

    第二种方法更可取,您可以创建一个接口 IApplication 使用应用程序的所有可修改/可插入部分,并要求所有插件实现和 IModifyApp 与某些方法的接口,如 IModifyApp.Modify(IApplication) 它获取iaapplication的一个实例,并返回一个要处理的应用程序的修改实例。

    你也应该退房 MEF Microsoft托管扩展性框架。

        3
  •  0
  •   dexter    15 年前

    我之前为这种场景所做的是使用AppDomain。这就像是你的主要过程中的一个过程。您可以在AppDomain中加载和卸载程序集,无需停止主进程,只要您的主进程知道从AppDomain中的“updates”dll加载的接口,它就可以毫无问题地使用它。如果不是,那么总会有反射:)

        4
  •  0
  •   dotnetnate    15 年前

    你可能想看看像出租车/棱镜这样的东西来满足你的需求。很多UI-y-ness(技术术语)都是通过一系列的抽象来构建的。

    http://compositewpf.codeplex.com/

    推荐文章