Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#应用程序的应用程序设置_C#_Oop - Fatal编程技术网

C#应用程序的应用程序设置

C#应用程序的应用程序设置,c#,oop,C#,Oop,我有一个应用程序,它具有用户可以在运行应用程序之前选择的设置。这些设置存储在数据库中。整个应用程序使用这些设置。现在,每个使用设置的类都在其构造函数中调用数据库,以将设置加载到类中。这对我来说很奇怪,因为在运行应用程序的过程中,设置不应该改变。那么,如何将应用程序设置称为??您是否使用静态类或单例模式,而不是每次点击数据库调用相同的设置???是的,我通常在静态应用程序类中抛出此类内容,尤其是在没有理由多次查询的情况下。我将使用单例,这实际上只是对Jarrett答案的一个更可控的修改。选择适合你设

我有一个应用程序,它具有用户可以在运行应用程序之前选择的设置。这些设置存储在数据库中。整个应用程序使用这些设置。现在,每个使用设置的类都在其构造函数中调用数据库,以将设置加载到类中。这对我来说很奇怪,因为在运行应用程序的过程中,设置不应该改变。那么,如何将应用程序设置称为??您是否使用静态类或单例模式,而不是每次点击数据库调用相同的设置???

是的,我通常在静态应用程序类中抛出此类内容,尤其是在没有理由多次查询的情况下。

我将使用单例,这实际上只是对Jarrett答案的一个更可控的修改。选择适合你设计的

忽略所有关于辛格尔顿的坏消息。任何构造都可能被滥用,只要明智地使用它


正如您所说,将这种责任放在保存应用程序数据的单例类上是很常见的

另一个选项是在VS2005/2008/2010中使用项目属性上的“设置”选项卡。 (右键单击项目名称,然后单击“设置”选项卡并创建设置文件。) 有关“设置页面”的更多信息:

您可以在应用程序启动时自动(从DB)修改设置页面,然后从应用程序中的任何位置读取值。 有关
ConfigurationManager类的更多信息,请参阅本文


祝你好运

您的课程取决于设置。因此,您可能需要考虑将它们与存储方式进行解耦并提高类的可测试性。

如果使用依赖项注入框架(Castle Windsor、NInject等),这会容易得多


为了避免重新查询数据库,您应该创建一个具有单例生存期的设置对象。避免像瘟疫一样的静态单例。它们使您的应用程序天生不稳定。请参见。

您能澄清一下什么是设置对象具有单例生存期而不是静态单例吗?我不太明白这一点。除非将所有数据放在一个类中,否则类如何不依赖于其他类?在这种情况下,我认为它们应该取决于用户选择的设置。@Steven:问题不在于singleton,而在于静态实现。因此,您要做的是创建一个类,但要确保只创建一个类。依赖注入框架实现了这一点。创建一个类,给它一个生命周期,并将其添加到DI容器中。任何需要单例的类都会向容器请求副本。容器总是传回唯一的副本。@Rob,我完全同意你的意见。这些设置是一个依赖项,其他人的答案隐藏了该依赖项。此外,我的收件箱中目前有几个日志文件,因为就在上周,我维护的一个应用程序中的设置的静态单例类在静态类构造函数期间抛出了暂时异常。使用DI框架来管理设置的类生存期,并对依赖于它的类进行显式处理,这绝对是一种方法。@用户:不是说类不依赖,而是很难介于它们和依赖之间。例如,假设您想在两种不同的设置下测试一个类。有很多方法可以通过模拟来拦截对singleton的静态调用,但是只需从单元测试工具中传入两种不同的设置就更容易了。singleton受到负面影响的原因有很多,也有很多好的原因。其中之一是可测试性。在大多数情况下,Singlton是一个设计缺陷。你为什么要依赖于具体的实施?你为什么想做程序编码?我完全不同意。牛群有一种特殊的气味。这将用于在启动时从app.config读取值。我不确定它对数据库中的配置有何帮助。当应用程序启动时,您可以自动(从数据库)修改它,然后从应用程序中的任何位置读取值。好的,您如何知道它们何时被更改?在许多情况下,预期的行为并不在意:只使用开始时有效的内容。1。这是他最初写的:“这对我来说很奇怪,因为设置在运行应用程序的过程中不应该改变。”所以我认为不会发生任何变化。2.对于你提出的问题,有两种解决方案:a。您可以定期检查数据库。B应用程序可以注册到更改DB(更改配置)的模块将提供的事件。(可以使用观察者模式)。一个明显的问题是:如果它从数据库中获取其配置,那么它首先是如何找到数据库的?