Asp.net mvc ASP.NET MVC中的Web.config设置类

Asp.net mvc ASP.NET MVC中的Web.config设置类,asp.net-mvc,dependency-injection,web-config,Asp.net Mvc,Dependency Injection,Web Config,在ASP.NET Web表单上,我曾经有一个名为WebConfigSettings的实用工具静态类,其中我从Web.config文件读取了所有应用程序设置(例如WebConfigSettings.DebugModeEnabled)。 在MVC上这是一种糟糕的做法吗?我是否更喜欢使用非静态类并使用依赖项注入将其注入控制器?如果是,我应该把财产放在控制器上的什么地方?我已经读到我不应该使用基本控制器。这是我在MVC中使用的方法。我有一个具有多个属性的静态AppSettings类,这是非常灵活的,因为

在ASP.NET Web表单上,我曾经有一个名为
WebConfigSettings
的实用工具静态类,其中我从Web.config文件读取了所有应用程序设置(例如
WebConfigSettings.DebugModeEnabled
)。

在MVC上这是一种糟糕的做法吗?我是否更喜欢使用非静态类并使用依赖项注入将其注入控制器?如果是,我应该把财产放在控制器上的什么地方?我已经读到我不应该使用基本控制器。

这是我在MVC中使用的方法。我有一个具有多个属性的静态AppSettings类,这是非常灵活的,因为有些属性是从Web.config、数据库/缓存读取的,甚至是计算属性


这可以在控制器之外使用-可能在模型或视图中使用。

静态类的问题是,您将把控制器与.NET配置系统耦合在一起,使它们更难单独进行单元测试。您可以有一个
IConfiguration
接口,其中包含在整个应用程序中需要的必要属性,还可以有一个从配置文件读取属性值的接口实现。现在剩下的就是配置您最喜欢的DI框架,以便将此接口的正确实现注入控制器构造函数。在单元测试中,您将能够模拟这个接口。

Lol使用一个打开数据库连接并在视图中使用的静态类?真正地这会影响到所有的模式,包括MVC,这些属性都是从缓存中读取的,但是如果缓存不存在,则会从数据库中读取并放置在缓存中。DB只在应用程序启动时读取,或者在它被更新并且缓存失效时读取。这似乎是合理的,但是我将把配置类的实际实例放在哪里呢?在基本控制器的属性上?不,可以使用构造函数注入。需要此依赖项的控制器将使用
IConfiguration
作为构造函数参数。噢,谢谢!你能给我指一本关于ASP.NET MVC控制器构造函数注入的好教程/指南吗?有无数的教程。你所要做的就是搜索。具体细节当然取决于您正在使用的实际依赖注入框架。下面是ASP.NET MVC官方网站上的一些教程:好的,谢谢。我将把这个改编成Ninject。仍标记为答案:)