我有一个Windows Forms应用程序,该应用程序当前在启动时加载数据库。流程是这样的:

Program.cs => Application.Run(new MainForm()); => MainForm构造函数=>打开数据库

因此,基本上MainForm包含使应用程序运行的所有细节,而Program.cs只是一个存根。当前,已加载的数据库的名称是硬编码的,我想添加功能以指定要通过命令行加载的数据库的名称。同时,我想稍后再添加进行某些单元测试甚至依赖注入的功能,所以我想知道推荐哪种方法?


更改MainForm的构造函数以接受一些参数。然后将Program.cs更改为读取命令行,并将调用相应地更改为Application.Run(new MainForm());
保持Program.cs和构造函数的Signature不变,并检查MainForm构造函数中的命令行


方法一似乎更干净,因为它允许测试运行者使用测试数据库创建MainForm,但是由于我通常不是WinForms开发人员,所以我不知道是否在默认数据库上没有默认构造函数会产生副作用主表格还是有更好的方法?

最佳答案

我认为这归结为关注点分离。 Program类应与应用程序级别的详细信息有关,MainForm与表单的详细信息有关。然后,这对我说该程序应解析命令行并将名称传递给表单。

您仍然可以将默认构造函数保留在窗体上,或者将其标记为私有,或者在执行时抛出错误。或者,您仍然可以让Program.cs使用默认构造函数来创建表单,并简单地使用参数注入数据库名称(因此可以是构造函数注入或参数注入),例如

form = new MainForm();
form.DbName =“ foo”;
Application.Run(form);

关于c# - WinForms应用程序中的初始化代码-Program.cs还是MainForm?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1221113/

10-09 02:54