C# 如何存储我的ASP.NET MVC站点';什么样的设置?

C# 如何存储我的ASP.NET MVC站点';什么样的设置?,c#,.net,asp.net-mvc,xml,C#,.net,Asp.net Mvc,Xml,我有一个ASP.NET MVC站点,它由解决方案中的3个项目组成: DomainModel(类库-持有LINQ Repo) DomainServices(类库-保存业务逻辑) WebUI(ASP.NET MVC站点) 我需要一个地方来存储我们的网站,可以通过XML配置一堆设置 这个项目应该投入哪个项目?有没有人举过一个例子,说明他们如何在这些不同的项目中加载并访问他们的设置 我是否在包含所有设置属性的某个C#类的构造函数中加载一次XML文件 有人能给我一些在XML文件中存储设置以用于多项目解决方

我有一个ASP.NET MVC站点,它由解决方案中的3个项目组成:

DomainModel(类库-持有LINQ Repo)
DomainServices(类库-保存业务逻辑)
WebUI(ASP.NET MVC站点)

我需要一个地方来存储我们的网站,可以通过XML配置一堆设置

这个项目应该投入哪个项目?有没有人举过一个例子,说明他们如何在这些不同的项目中加载并访问他们的设置

我是否在包含所有设置属性的某个C#类的构造函数中加载一次XML文件


有人能给我一些在XML文件中存储设置以用于多项目解决方案的示例和提示吗?

我会将其存储在一个带有接口的新服务中

我要做的是让一个类具有所有属性/设置。它还将管理XML文件


反转控制容器允许您使用依赖项注入将它们注入到其他类中。

设置通常存储在web.config中。所有程序集都可以访问这些设置

ConfigurationManager.AppSettings["key"]

您需要添加对System.configuration.dll的引用

我同意Mathias使用框架提供的默认方式。但是,您仍然可以(should,IMHO)创建某种包装类,可能是在接口后面,以便在单元测试中进行模拟,例如:

class MyAppSettings
{
    public int SomeSetting 
    { 
       get 
       {
         return Convert.ToInt32(ConfigurationManager.AppSettings["SomeSetting"]); 
       } 
    }
}

在类库中定义共享属性以保存应用程序设置(Specialized.NameValueCollection的实例)。然后在站点逻辑中,从global.asax的Application_Start sub中的web.config将此新属性设置为ASP.NET设置

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Code that runs on application startup
    DomainModel.Common.AppSettings = ConfigurationManager.AppSettings
End Sub

这样,您可以从类库项目中获得设置。

而不是使用AppSt设置,它只是键值对的集合,考虑使用配置节或IConfigurationSectionHandler

定义自己的配置结构。 这样,您就获得了包装器类的所有安全性,并且它不会使您的应用程序设置变得杂乱无章(并且在某个地方为您的使用进行了很好的定义)

更好的方法是,定义自己的XML模式,并使用XmlSerialization/Deserialization将此文件存储在web.config之外,监听其更改(将其绑定到缓存,无论什么)

如果这样做,则不需要修改web.config以获得更改,因此不需要重新启动web应用程序,从而在过程中丢失会话/缓存


写得好的无状态web应用程序不应该关心丢失会话/缓存,但总有人…:)

我在考虑把它变成一个静态类,考虑到我不需要它的多个实例。但不确定。默认情况下,一个合适的IoC容器只会构造一个。