2010-01-06 68 views
5

我这是在一个解决方案由3个项目的ASP.NET MVC网站:我应该如何存储我的ASP.NET MVC网站的设置?

的DomainModel(类库 - 保存LINQ回购)
DomainServices(类库 - 保存业务逻辑)
Web用户界面( ASP.NET MVC网站)

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

该进行哪项工作?有没有人有他们如何加载,然后通过这些不同的项目访问他们的设置的例子?

难道我加载XML文件一次,在包含了我所有的设置的属性一些C#类的构造函数?

有人可以给我一些例子和技巧在使用XML文件存储在多项目解决方案的设置?

回答

8

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

ConfigurationManager.AppSettings["key"] 

您需要添加一个引用System.configuration.dll

1

我将其存储在一个接口的新服务。

我要做的就是有一类具有所有属性/设置。它也会管理XML文件。

控制的颠倒容器将允许你注入他们使用依赖注入到你的其他类。

+0

我正在考虑使其成为一个静态类考虑,我不认为我需要它的多个实例。但不知道。 – Rinndar 2010-01-06 17:06:47

+0

一个合适的IoC容器只会默认构建一个容器。 – 2010-01-06 17:11:54

2

我马蒂亚斯同意使用由框架提供的默认方式。但是,您可以(应该,恕我直言)仍然做出某种包装类的,可能是一个接口后面促进嘲弄在单元测试中,如:

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

在你的类库定义共享属性来保存应用程序设置(Specialized.NameValueCollection的实例)。然后在您的站点逻辑中,将此新属性设置为global.asax的Application_Start子目录中的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 

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

7

而不是使用AppSettings的,这仅仅是一个键值对的集合,可以考虑通过定义使用配置节或您自己的配置结构IConfigurationSectionHandler

这样,你得到的包装类的所有安全性,并且它不混乱你的AppSettings(并很好地定义在某处供你使用)。

更好的是,定义自己的XML模式,并使用XmlSerialization/Deserialization在web.config之外存储此文件,监听它的更改(将其与缓存相关)。

如果你这样说,你并不需要修改web.config中得到改变,因此不需要重新启动您的Web应用程序丢失会话/高速缓存中的过程。

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

相关问题