(注入的)服务之间的依赖关系
Dependencies between (injected) services
我正在构建一个 Web 应用程序并且有一个业务逻辑服务层。这些服务被注入到控制器中。现在,我想知道在以下情况下最佳做法是什么。
我有一个 AuthenticatorService
,不出所料,它负责身份验证。当用户尝试进行身份验证时,这显然是应该记录的内容。这是 LoggerService
可以处理的事情。
现在,我正在向 AuthenticatorService
中注入一个 LoggerService
,但是服务之间的依赖关系感觉不是很干净...
我将具体类型绑定到接口,所以从逻辑上讲我会说这很好 - 显然,绝对可以肯定注入的服务永远不会有理由依赖另一个,从而创建一个循环依赖。
我很想知道其他人是如何解决这个问题的——或者,这是否根本不是问题。
请不要建议从控制器处理日志记录 - 这只是一个例子,还有很多可以想象的情况,其中一个服务可能想要调用另一个。
I'm very interested in reading how others are solving this problem - or, whether it is not a problem at all.
是的,这是一个问题 - 事实上,这是最常被问及的问题之一。这个问题的名称是crosscutting concerns。有几种不同的方法可以解决这个问题。
- 特定于框架 - 在 MVC/WebApi 中,有 filters 可以 运行 在特定控制器、操作或每个请求中使用逻辑。
- 使用第三方 Aspect-Oriented Programming (AOP) framework。
- 使用常见的设计模式,例如 proxy or decorator. Here is an proxy example using the .NET RealProxy class。
- Interception,几个主要依赖注入框架内置的功能。
我正在构建一个 Web 应用程序并且有一个业务逻辑服务层。这些服务被注入到控制器中。现在,我想知道在以下情况下最佳做法是什么。
我有一个 AuthenticatorService
,不出所料,它负责身份验证。当用户尝试进行身份验证时,这显然是应该记录的内容。这是 LoggerService
可以处理的事情。
现在,我正在向 AuthenticatorService
中注入一个 LoggerService
,但是服务之间的依赖关系感觉不是很干净...
我将具体类型绑定到接口,所以从逻辑上讲我会说这很好 - 显然,绝对可以肯定注入的服务永远不会有理由依赖另一个,从而创建一个循环依赖。
我很想知道其他人是如何解决这个问题的——或者,这是否根本不是问题。
请不要建议从控制器处理日志记录 - 这只是一个例子,还有很多可以想象的情况,其中一个服务可能想要调用另一个。
I'm very interested in reading how others are solving this problem - or, whether it is not a problem at all.
是的,这是一个问题 - 事实上,这是最常被问及的问题之一。这个问题的名称是crosscutting concerns。有几种不同的方法可以解决这个问题。
- 特定于框架 - 在 MVC/WebApi 中,有 filters 可以 运行 在特定控制器、操作或每个请求中使用逻辑。
- 使用第三方 Aspect-Oriented Programming (AOP) framework。
- 使用常见的设计模式,例如 proxy or decorator. Here is an proxy example using the .NET RealProxy class。
- Interception,几个主要依赖注入框架内置的功能。