(注入)服务之间的依赖关系

时间:2018-01-10 16:37:59

标签: dependency-injection language-agnostic

我正在构建一个Web应用程序并拥有一个用于业务逻辑的服务层。这些服务被注入控制器。现在,我想知道在以下情况下最佳做法是什么。

我有一个AuthenticatorService,毫不奇怪,它负责身份验证。当用户尝试进行身份验证时,这显然应该记录下来。这是LoggerService可以处理的事情。

现在,我正在向LoggerService注入一个AuthenticatorService,但服务之间的依赖关系感觉不是很干净......

我将具体类型绑定到接口,所以从逻辑上讲我会说这很好 - 很明显,假设注入的服务永远不会有理由依赖另一个,从而创建循环依赖。

我非常有兴趣阅读其他人如何解决这个问题 - 或者,这根本不是问题。

请不要建议从控制器处理日志记录 - 这只是一个例子,并且在一个服务可能想要调用另一个服务的情况下可以想到更多的情况。

1 个答案:

答案 0 :(得分:2)

  

我非常有兴趣阅读其他人如何解决这个问题 - 或者,这根本不是问题。

是的,这是一个问题 - 事实上,它是最受关注的问题之一。此问题的名称是crosscutting concerns。有几种不同的方法可以解决问题。

  1. 特定于框架 - 在MVC / WebApi中,filters可以在特定控制器,操作或每个请求中运行逻辑。
  2. 使用第三方Aspect-Oriented Programming (AOP) framework
  3. 使用proxydecorator等常见设计模式。这是proxy example using the .NET RealProxy class
  4. Interception,一个内置于几个主要依赖注入框架的功能。