考虑到许多可能的方法来处理诸如日志记录之类的跨领域问题,我认为通过Interception是解决这些问题的一种好方法。 (另外,马克·西曼(Mark Seemann)在他的《 .NET中的依赖注入》中提到拦截是跨领域依赖的有效解决方案。)
但是在我的特定情况下,我想使用.Net Core,它是DispatchProxy。并记录Microsoft's Logging Extension。
使用通用代理拦截方法调用并在Debug level上记录调用非常容易。但是,如何记录方法内部可能发生的拦截器信息日志? 我的想法是在每个需要记录一个空Log()方法的类中实现,该方法接受抽象日志信息作为参数。因此,如果用户需要记录任何信息性信息,则可以调用此方法并提供日志内容。调用此方法时,拦截器可以拦截并根据自变量区别于其他方法。随后,将记录该信息,而调用者无需依赖记录器界面。
我唯一担心的是我可能违反一项原则?还是还有其他需要考虑的东西?
public class Foo
{
public void someMethod()
{
// do stuff
this.Log(new MyLog("Log this information"));
// do stuff
}
private void Log(ILog mylog) { }
}
public Interface ILog
{
string Message;
Exception Ex;
LogLevel level;
// anything worth logging
}