我应该如何存储我的ASP.NET MVC网站的设置?

时间:2010-01-06 17:01:02

标签: c# .net asp.net-mvc xml

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

  

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

我需要一个地方来存储我们网站的一系列设置,这些设置可以通过XML进行配置。

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

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

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

5 个答案:

答案 0 :(得分:8)

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

ConfigurationManager.AppSettings["key"]

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

答案 1 :(得分:7)

考虑使用ConfigurationSection或IConfigurationSectionHandler

来定义自己的配置结构,而不是使用仅仅是键值对集合的AppSettings。

这样你就可以获得包装类的所有安全性,并且它不会使你的AppSettings混乱(并且很好地定义在你的地方)。

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

如果以这种方式执行此操作,则无需修改web.config即可获取更改,因此无需重新启动Web应用程序,从而在此过程中丢失会话/缓存。

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

答案 2 :(得分:2)

我同意Mathias使用框架提供的默认方式。但是,你可以(应该,恕我直言)仍然制作某种包装类,可能在一个界面后面,以便在单元测试中进行模拟,例如:

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

答案 3 :(得分:1)

我会将它存储在带有界面的新服务中。

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

Inversion of Control容器允许您使用依赖注入将它们注入其他类。

答案 4 :(得分:0)

在类库中定义共享属性以保存应用程序设置(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

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