【发布时间】:2014-01-19 21:57:26
【问题描述】:
我已在此处阅读有关循环引用的其他问题,但我找不到我的问题的答案。
我有三个类库:Authentication、EmailService 和 ExceptionService。
身份验证控制用户登录到各种应用程序,EmailService 发送电子邮件,ExceptionService 将错误/异常记录到数据库。
目前,Authentication 引用了 EmailService 和 ExceptionService,以使用它们的功能,这很有效。 ExceptionService 引用 EmailService 来发送报告电子邮件。一切都很好。
我想知道的是以下是否可行/可取/愚蠢,以及是否有更好的方法:
我希望 EmailService 能够使用 ExceptionService 的功能,以便报告 EmailService 中的任何错误。从理论上讲,这可能意味着 ExcpetionService 然后会回调到 EmailService 以发送报告电子邮件,这可能会触发相同的错误,因此我必须编写一个仅由 EmailService 使用的方法,它不发送电子邮件,只记录了它。
ExceptionService 仍应引用 EmailService。
身份验证类库还应该使用其他两个服务。
这一切听起来非常复杂和循环,这就是为什么我认为这可能不是一件好事。但是我应该怎么做呢?
我尝试在 EmailService 中引用 ExceptionService,但是当我创建私有 ExceptionService 对象并尝试使用它时,它不会编译。
我想我真正想要的是让我的任何应用程序引用 EmailService 和 ExceptionService,但它们也可以相互引用。
到目前为止,我发现解决此问题的唯一方法是忘记在 EmailService 中报告异常。
非常感谢您的帮助:)
【问题讨论】:
-
为什么不让像 Log4net 这样的第三方实用程序来处理您的异常日志记录?您可以将 log4net 配置为将电子邮件作为日志输出发送。
-
使用 NLog 记录它的最佳选项,它还可以发送电子邮件
-
如果服务直接依赖其他服务来实现非核心功能,则设计存在缺陷。最好使用服务总线在服务之间进行通信。详细解释超出了评论的范围,但请查看 MassTransit 或 NServiceBus。基本上每个服务都向服务总线发送消息,并且可以从该总线读取消息。例如,错误服务可以向总线发送错误消息,然后电子邮件服务将接收该错误消息以创建有关它的电子邮件消息并发送它。这样服务之间就没有直接的依赖关系了。
标签: c# asp.net-mvc reference class-library