在.NET代码和web.config中使用常量的DRY

时间:2012-06-26 13:47:25

标签: .net web-config log4net dry event-log

我有一个Web应用程序需要一个自定义安装程序(使用installutil运行),它注册事件日志的事件源。此安装程序代码包含一个常量(特别是事件源的名称),该常量也在web.config文件中重复。

有没有办法可以在一个地方定义这个常数(根据“DRY”原则)?

更多背景信息:这适用于log4net事件日志附加程序,它需要安装程序根据this log4net FAQ来防止权限问题。

1 个答案:

答案 0 :(得分:1)

根本不是一般问题的解决方案,但我通过编写自定义log4net appender解决了这个特殊情况,只是为了可以在代码而不是通过配置文件初始化它:

public sealed class EzeReportingEventLogAppender : EventLogAppender
{
    public EzeReportingEventLogAppender()
    {
        Layout = new PatternLayout(Configuration.EventLogPatternLayout);
        LogName = Configuration.EventLogName;
        ApplicationName = Configuration.EventLogApplicationName;
    }
}

在web.config中(不再包含applicationName):

<appender name="FatalAppender" type="EzeReporting.EzeReportingEventLogAppender">
  <filter type="log4net.Filter.LevelRangeFilter">
    <param name="LevelMin" value="FATAL" />
  </filter>
</appender>