我的应用程序基本上是一个带有预加载控件的设计器,您可以使用控件设计页面。
我计划将来发布越来越多的控件。我不想为新添加的控件发布新版本,因为它有它的缺点。所以我想到了addon / plugin这种架构,我只是单独发布了addon / plugin,他们可以安装它们并获得设计器内的控件。
现在我正在使用xml文件作为插件来指定控件,行为,样式等。每个xml(插件)代表一个控件。但我发现很难实现这个,因为我要写一个通用的解析器来读取所有的插件。
相反,我可以为每个插件释放一个dll,这使我能够更好地控制编写代码以定义控件的行为/外观并通过主引擎动态加载它吗?如果是这样,我如何检查dll并在我的应用程序中动态加载它?
答案 0 :(得分:9)
您可能需要查看Managed Extensibility Framework。这可能会解决您的大多数问题以及更多问题,但需要学习一些新的技术......
你也应该按照mathieu建议的那样查看System.Addin
命名空间!
如果您想使用自己的路线,我建议采用以下方法:
Assembly.Load
在运行时加载dll
答案 1 :(得分:4)
您应该查看System.Addin命名空间,因为它确实符合您的需要。在开发插件之后,您只需将其放在一个文件夹中,它就可以(在运行时)用于您的应用程序。
请参阅此问题进行比较:Choosing between MEF and MAF (System.AddIn)
答案 2 :(得分:1)
提到的MEF或System.Addins路线可能是最有效的方法。我只是谈谈替代方案的一些事情。
我已经多次“手动”这种解决方案,我会说,除非有令人信服的理由从头开始,否则最好使用现有的插件框架。但是如果你打算这样做的话,我发现像Castle这样的依赖注入容器或者(在这里插入你喜欢的DI容器)来帮助处理一些机制。
同样取决于您想要做的事情,嵌入宏语言的方法可能很有用。 Iron Python易于嵌入。 Ayende写了一本非常有趣的书DSLs in Boo来做这类事情等等。