2010-12-08 47 views
0

在MVC应用程序中,我们需要创建整个应用程序所需的配置设置类。这是一个交叉的问题,因为它需要控制器,有时甚至是深层的逻辑,以及像HtmlHelper扩展那样的地方。它需要的事实是这么多不同的地方是让我绊倒的东西。使用IoC的ASP.NET MVC配置类

该类将包装从web.config中提取的设置以及DB中的表格。数据库设置查询将被缓存,所以我不担心每次请求都会遇到。

在过去的几年中,我可能创建了一些静态类或单例类型,但我不想失去现在的可测试性。什么是最好的方式来实例化这个类,然后能够通过应用程序中的任何地方访问它?

回答

0

我觉得CodePlex项目mvccontrib提供了一些挂钩尽量使用 至少3 IOC提供商我不温莎,structurmap,spring.net ... 但我没有用它自己 你可以找到更多这里 http://mvccontrib.codeplex.com/

,也许你可以看看这个项目的源代码,看看在那里你可以从那里......

HTH

3

我会继续使用单。但是一个封装了接口的单例,也使它成为可测试的。

public class Configuration 
{ 
    private IConfiguration _config; 

    public static IConfiguration Instance { get { return _config; }} 

    public static void Assign(IConfiguration config) 
    { 
     _config = config; 
    } 
} 

只需在global.asax或任何单元测试中使用Assign即可。

如果您想以正确的方式执行此操作,则应直接在对象的构造函数中提供配置设置。

而不是

public class MyService 
{ 
    public MyService() 
    { 
     var confString = Configuration.Instance.GetConnectionString() 
    } 
} 

你会做:

public class MyService 
{ 
    public MyService(string confString) 
    {} 
} 

最后,我也不会在HTML佣工任何配置的依赖。通过这样做你是添加业务逻辑到您的意见中断separation of concerns

0

我会重构我的应用程序不使用配置无处不在。我只在控制器中使用配置。我的观点没有任何逻辑,我的领域模型只有业务逻辑,而不是应用程序逻辑。