如何处理记录器服务的循环依赖

时间:2010-06-07 18:42:33

标签: c# asp.net design-patterns

我有一个带有记录器类的服务层

服务层引用Logger类的DAL以获取在为关键日志项发送电子邮件时使用的电子邮件凭据。

我想在DAL中使用这个记录器,因为还有需要在那里记录的东西 - 但是我现在的架构我不能。

我看到这可以通过IOC来处理,但我对此的关注是,如果我这样做,我将解决问题的根源,或者使用另一层抽象隐藏它。

处理这个问题的好方法是什么?

1 个答案:

答案 0 :(得分:1)

通常,循环依赖是不可取的 - 它们使调试,维护变得复杂,并对代码的结构和扩展方式施加限制。尽可能消除循环依赖。

如果记录器需要很少的信息才能运行 - 那么我建议从记录器中重新获取DAL的依赖性。将电子邮件放入配置文件中,或使用嵌入在记录器中的单独机制来访问它们。在大多数系统中,日志记录是一个相当低级别的实用程序功能 - 您应该避免使记录器依赖于您的数据访问模型。特别是因为即使数据库不可用,您也希望能够记录信息。如果数据层不可用,则记录器无法正常工作,这有点无用。

注意:您是否有理由不能使用log4netNLog等现有的日志记录库?

如果由于某种原因,这是不可能的 - 那么控制反转(依赖注入)解决方案可能是合适的。只是意识到你需要将记录器暴露的接口分解为第三个程序集 - 这样你就可以安全地从DAL中调用它。