好吧所以我试着去创建一个设置类来存储某些字符串,我要访问整个系统。我已创建的 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();
* * 我应将构造函数设置为私有和实现单例模式,因为它毕竟是设置类,只需要一个实例吗?
我会更好扩展控制器类中它的设置信息呢?
**
就个人而言,我会相当孤立地看待这些事情。例如,为什么你所有的控制器都需要知道怎么写事件日志?我将有一个单独的惰性写入器类和 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
}
一本字典将是有用的如果他们取自配置;如果他们是真正全球性的一个静态字典应该足够了 — — 实例只会有用的如果它改变之间的印象。单身人士会没有目的在这里;改用静态成员。