如何在C#ASP.NET网站中有条件地启用操作
使用配置文件,我想使自己能够打开和关闭(第三方)日志记录以及使用Cwebsite中的缓存之类的功能。该解决方案不应特别局限于日志记录和缓存,而应更笼统,因此我也可以将其用于其他用途。
我有一个配置xml文件,可以断言应该打开或者关闭日志记录和缓存(它也可以在Web.Config中,现在还不重要),这将导致例如" bool logging"。和"布尔缓存"为"真"或者"假"。
问题是关于这部分的:
我所能做的是在每个与日志记录/缓存相关的语句前添加if(logging)
和if(caching)
。
有什么更好的编程方法?还有针对此类问题的编程术语吗?也许属性也是一种方法?
解决方案
回答
为什么不只使用现有的web.config和System.Configuration功能?
Web应用程序将无论如何都要在每个页面加载时解析web.config,因此,仅在现有配置上定义自己的部分时,拥有另一个XML配置文件所涉及的开销似乎过大了。
回答
有关配置缓存的详细信息,请查阅http://msdn.microsoft.com/zh-cn/library/ms178606.aspx。
回答
我同意foxxtrot,我们要使用web.config并添加一个或者两个appsetting来保存值。
然后,对于检查的实现,是的,只需使用if来查看是否需要执行该操作。我强烈建议集中日志记录类,以防止代码重复。
回答
我们可以使用依赖项注入容器,并使其根据配置加载不同的日志记录和缓存对象。如果要启用日志记录,则可以在config中指定一个活动的Logging对象/提供程序;如果要禁用它,则可以让DI注入一个"虚拟"日志记录提供程序,该提供程序不记录任何内容,而是立即返回。
我倾向于采用一种更简单的设计,例如@foxxtrot提出的设计,但是运行时交换实用程序组件是DI可以为我们做的一件好事。
回答
我们可以签出Microsoft Enterprise Library。它具有诸如日志记录和缓存之类的功能。由于我们总是包含日志记录代码,但是其下方的实际日志记录由设置控制,因此使日志记录变得容易。
http://msdn.microsoft.com/en-us/library/cc467894.aspx
我们可以在模式和实践组中找到其他很酷的东西。
回答
我很好奇我们拥有哪种日志记录/缓存语句?如果我们有某个正在执行WriteLog或者StoreCahce或者其他操作的类,为什么不将if(logging)放在WriteLog方法中。看来,如果我们将所有与日志记录缓存相关的方法都放到一个类中,并且该类知道日志记录/缓存是否已打开,则可以在每个实例中为自己保存一堆If语句。