[asp.net-mvc].NET MVC-全局设置类-这些方法中的哪一个是最佳︰

标签: Asp.net-MVC .Net
发布时间: 2017/3/25 9:55:20
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

好吧所以我试着去创建一个设置类来存储某些字符串,我要访问整个系统。我已创建的 globalSettings.cs 与下面的代码︰

public class GlobalSettings
{
    private readonly Hashtable myHT;

    public GlobalSettings()
    {
        //Hashtable used to store global strings
        myHT = new Hashtable();
        myHT.Add("logCategory","TMBC"); //event log category
        myHT.Add("logSource", "MVC"); //event log source


        //setup required options

        //Create log source if required
        if (!EventLog.SourceExists(myHT["logSource"].ToString()))
        {
            EventLog.CreateEventSource(myHT["logSource"].ToString(), myHT["logCategory"].ToString());
        }

    }

    public string getSetting(string key)
    {
        return myHT.ContainsKey(key) ? myHT[key].ToString() : null;
    }
}

目前我已经在每一个我与下列控制器初始化此类︰

protected GlobalSettings globalSettings = new GlobalSettings();

* * 我应将构造函数设置为私有和实现单例模式,因为它毕竟是设置类,只需要一个实例吗?

我会更好扩展控制器类中它的设置信息呢?

**

解决方法 1:

就个人而言,我会相当孤立地看待这些事情。例如,为什么你所有的控制器都需要知道怎么写事件日志?我将有一个单独的惰性写入器类和 ILogWriter 接口,并使用依赖注入 (请参阅 MVCContrib 样品)-即

class FooController : Controller {
    private readonly ILogWriter logWriter;
    public FooController(ILogWriter logWriter) {
        this.logWriter = logWriter; // <==== edited for clarity
    }
}

(和使用基于 DI 的控制器工厂)

这允许您向单元测试日志写作嘲弄日志作家。然后设置合理以及常量 (或者将从配置中获取) 在惰性写入器类的内部。


再具体问题;如果所有的值不变时,,使用常量 (或也许静态属性)︰

public static GlobalSettings
{
    public static const string LogCategory = "TMBC"; //event log category
    public static const string LogSource = "MVC"; //event log source
}

一本字典将是有用的如果他们取自配置;如果他们是真正全球性的一个静态字典应该足够了 — — 实例只会有用的如果它改变之间的印象。单身人士会没有目的在这里;改用静态成员。

官方微信
官方QQ群
31647020