实现插件架构-动态DLL加载

| 我有一个应用程序,它基本上是一个带有预加载控件的设计器,您可以在其中使用控件来设计页面。 我计划在将来发布越来越多的控件。我不想为新添加的控件发布新版本,因为它有其缺点。因此,我想到的是插件/插件类型的体系结构,在该体系结构中,我只是单独发布插件/插件,他们可以安装插件并在设计器中获取控件。 现在,我使用xml文件作为插件来指定控件,其行为,样式等。每个xml(插件)都代表一个控件。但是我发现很难实现这一点,因为我必须编写一个通用解析器来读取所有插件。 相反,我是否可以为每个插件释放一个dll,从而为我提供更多控件来编写代码以定义控件的行为/外观并通过主机动态加载它?如果是这样,我如何检查dll并将其动态加载到我的应用程序中?     
已邀请:
您可能需要查看托管扩展框架。这可能会解决您的大多数问题,甚至更多,但需要学习一些新技术。 您还应该按照mathieu的建议使用
System.Addin
命名空间! 如果您想走自己的路线,建议您采用以下方法: 主应用程序中插件的接口 在插件dll中实现该接口 在运行时使用ѭ1加载dll 您可能要考虑将加载项程序集加载到单独的AppDomain中     
您应该看看System.Addin命名空间,因为它确实满足您的需求。开发外接程序后,您只需将其放入文件夹中,即可在运行时使用它。 http://kentb.blogspot.com/2008/06/maf-gymnastics-skeletal-solution.html 参见以下问题进行比较:在MEF和MAF之间选择(System.AddIn)     
提到的MEF或System.Addins路由可能是解决此问题的最有效方法。我只想说一些替代方案。 我已经多次“手推”这种解决方案,并且我想说,除非有令人信服的理由从头开始做,否则最好使用现有的插件框架。但是,如果您要这样做,我发现诸如Castle或(在此处插入您首选的DI容器)的依赖项注入容器可以帮助您处理某些问题。 另外,取决于您要执行的操作的种类,嵌入宏语言的方法可能很有用。 Iron Python很容易嵌入。而且Ayende在Boo上写了一本非常有趣的书《 DSLs》,内容涉及做这种事情等等。     

要回复问题请先登录注册