【发布时间】:2014-07-30 17:44:21
【问题描述】:
在针对以下类型的架构设置 IoC 容器时,我遇到了一个简单的问题。
在我的应用程序中,我有这样的层(从下到上):
- Project.Domain
-
Project.Web(System.Web.Http等加上一些核心的HTTP类型逻辑)
- 在这个项目中有一个 BaseController
- Project.MicroServices 在 Web API 2.2 中实现 GET/POST 等。这些继承自 Project.Web 中的 BaseController,并引用 Project.Domain
- Project.Logging 这是我尝试横切日志记录
当请求微服务层中的控制器时(GET、POST 等),SimpleInjector 使用属性注入将 ILogger 的实例添加到 BaseController。因此,微服务项目中的任何控制器都可以访问它。到目前为止效果很好。
这是我的问题:
我想让整个架构都可以访问日志记录,即使是在域层中,也不会破坏任何横切规则并保持事物解耦。我的想法可能是日志层可以订阅的域层发布的事件。但是,我离题了。我不明白的是如何让 SimpleInjector 将 Logger 实例传递给域(如果我应该,想法?)它是在应用程序启动时发生,还是仅在 Web 请求时发生?它应该是单例实例还是瞬态实例?以及这将如何最适合 Log4Net(我的架构可能过于复杂或过于复杂)。
我知道注册是在启动时发生的,但是获取实例呢?据我了解,我应该使用自动构造函数注入而不是使用 Container.GetInstance() 来获取实例,但是尽管我进行了大量阅读,但我仍然无法完全弄清楚它在 Web API 请求和 SimpleInjector 的 Web API 之外是如何工作的扩展。
另外,有些无关。我正在抽象出 Log4Net 功能,但我最近了解到我可能不应该这样做。考虑到这一点,我会喜欢一些关于如何将这一切联系在一起的建议。
【问题讨论】:
-
谢谢@Steven,我现在就去看看!
标签: c# .net asp.net-web-api dependency-injection simple-injector