2011-06-11 48 views
5

在这种情况下考虑:为多个客户定制c#WinForm应用程序

我有一个C#窗体窗体应用程序。这个应用程序对我所有的客户都是一样的。现在他们中的一个需要修改添加新文本框和新逻辑的表单。

我显然不想重复我的应用程序,并插入IF语句与客户ID来控制逻辑可以很容易地驱动到意大利面风格的代码。

我认为在这种情况下,我可以为每个客户创建一个单独的dll项目;在内部,我可以编写自定义窗体,实现与默认窗体相同的界面(对于逻辑类也是相同的),我可以尝试通过配置文件切换这些dll或使用正确的客户dll构建项目(或者使用例如Windsor Castle for DI )。

这是一个有效的模式?存在一种不同的方式?

更新

我尝试列表:

+1

在[MEF vs IOC/DI]上查看此答案(http://stackoverflow.com/questions/108116/mef-managed-extensibility-framework-vs-ioc-di)。我认为MEF或DI会为你工作。就个人而言,我会使用Autofac,但我有偏见。 – bentayloruk 2011-06-11 20:25:38

回答

1

如果您正在开发multitenant应用程序,则有类似Autofac的DI框架支持这种自定义。看看this article

你也可以使用你的源代码管理系统来帮助你。当您需要自定义时,创建一个分支并在那里进行自定义,因此您不必复制代码。

+0

我看到温莎也支持多租户!然而,你是在​​暗示我Autofac? – danyolgiax 2011-06-11 10:01:06

+0

不,他建议你使用DI容器。任何容器都可以工作,但Autofac有关于开发多租户应用程序的有用文档。 – Steven 2011-06-11 11:22:40

3

我认为在这种情况下,MEF将是一个更好的选择。 Castle更像是业务逻辑的DI引擎,对于控制对象生命周期很有用,特别是当您希望能够切换程序的工作方式(多个小线程或一个线程中的单个大操作)时。另一方面,MEF将剥夺您需要为此类配置添加配置文件的需求。你只需要操作库。我认为MEF最适合客户端的GUI形式。

+0

温莎城堡启用DI。但是,这不限于业务逻辑,可以在没有配置的情况下完成。 Autofac也是如此。因此,你在这个答案中推荐MEF的理由似乎具有误导性。另外,当你说“多个小线程或一个线程中的单个大操作”时,我不明白你的意思。你可以扩展这个吗? – bentayloruk 2011-06-11 20:17:35

+0

我没有写它只限于BL,只是我觉得它更合适。你可以让DI硬编码,或者在配置文件中(我认为配置文件更加灵活)。使用MEF,您可以实现其他功能 - 您可以控制必须加载的内容,只需提供适当的库,而无需修改任何文件。各种插件。有很多情况下你需要在GUI中使用这个功能,并且当它是整个客户端应用程序的一部分时,它们大多适用于BLL。 – AlexanderMP 2011-06-11 22:44:13

+0

至于线程...我确实有一种情况,在BLL中并行化一个进程会导致一些异常,我没有时间去解决。所以我写了2个相同功能的实现,并且在应用程序配置文件中更改组件生活方式时没有任何问题。 – AlexanderMP 2011-06-11 22:48:12