模块化 C# Winform 应用程序

本文关键字:应用程序 Winform 模块化 | 更新日期: 2023-09-27 18:31:24

我正在使用C#.NET 2010

我正在为 20 个网点开发一个 POS 项目,它已经在每个网点安装和使用。有一天,付款方式的形式发生了变化,我必须重新设计UI表单并修改逻辑代码。然后我重新编译项目并将更新发送到所有媒体,这并不容易做到。然后我有一个想法,我需要将项目中的每个表单作为模块分开(如果可以的话,我会使用 DLL 文件),所以当我修改表单时,我不需要重新编译所有表单。我只是修改和编译所需的表单并将其更新到插座。

那么我可以将表单编译为 DLL 吗?如果是这样,如何实现呢?或者也许我没有得到我的想法?

提前谢谢..

模块化 C# Winform 应用程序

已更新

正如对CP文章的评论所指出的那样,前面的答案有很多缺陷。本文在 C# 中更好地实现了插件体系结构。您也可以参考此答案以获取更多选择。

以前的答案

您可以使用插件架构来执行此操作。这是一篇非常好的文章,可能会对您有所帮助。

本文向您展示了如何将单个模块合并为另一个应用程序的插件或将其用作独立应用程序。本文将演示如何进行最小更改才能获得上述结果。

您可以在 DLL 中有一个窗体。窗体只是另一个类,通常实际上是许多类(即分部类),就像 DLL 中的任何其他类一样,您将引用相同的类。您只需要确保它是公开的,以便外部程序集可以访问它。

您只需要保持警惕,将紧密协作的表单(即公共引用)保留在同一程序集中可能是个好主意。过度调制可能会遇到困难。

我认为分发 DLL 没有任何问题。对于安全性来说,确保它已签名是个好主意(这可以在VS 2010中通过项目属性完成)。您可能应该为付款 UI 功能定义一个接口,然后由 DLL 中的类实现该接口。然后,应用的调用部分(不变的 UI)可以通过此接口而不是通过实际(具体)表单对象进行调用。

您可以发布 ClickOnce 应用程序,它将减少更新应用程序的难度。

我更感兴趣的是你说的原因" 然后我重新编译项目并将更新发送到所有渠道,这并不容易做到,为什么您认为"将每个表单分开为模块/DLL"会解决您的问题。是因为从所有项目编译的DLL的大小太大而无法发送?如果您尝试将每个表单分离到其自己的模块/DLL 中,那么您最终可能会使用一个解决方案来拥有多个项目......