我们的团队创建了一个库,可自动执行 WCF 服务的异常处理和日志记录。使用这个库,开发人员只需用自定义属性装饰服务,设置一些简单的配置文件条目,他们就可以利用通用的异常处理和日志记录机制。
以下是如何使用该库的示例:
[ErrorHandlingBehavior (LogWriterOption.EmailLogWriter, LogWriterOption.SQLLogWriter)]
public class SampleService : ISampleService
{
public string GetData(int value)
{
throw new DivideByZeroException();
//return string.Format("You entered: {0}", value);
}
}
ErrorHandlingBehavior 类使用 Logger 对象,该对象接受参数中的 LogWriterOption 枚举来确定记录的位置。
我们的初衷是让开发者指定自己的日志记录机制,并将其提供给ErrorHandlingBehavior,从而消除解决方案对Logger类的依赖(取而代之的是任何实现ILogger的类)。但是,以以下方式指定属性会产生错误:
[ErrorHandlingBehavior (new Logger (new HashSet<LogWriterOptions>
{LogWriterOption.EmailLogWriter, LogWriterOption.SQLLogWriter}))]
似乎我们在指定属性时无法实例化任何东西,因此我们现在无法让用户指定他们自己的日志记录机制。
有人知道解决这个问题的方法吗?我们如何将实现 ILogger 的类的实例提供给我们的属性,而不是硬连接依赖关系?