【发布时间】:2019-04-24 03:10:43
【问题描述】:
考虑 .NET Core Web 项目的以下项目结构。
MyApp.UI 项目 (MVC) 调用 MyApp.BusinessRules 调用 MyApp.ServiceLayer 调用 MyApp.DbAccess 项目调用任何东西。
在前端项目(MyApp.UI)中,我定义了logger。我想访问 MyApp.DbAccess 项目(或任何下游项目)中 logger 的这个实例,而无需通过控制器操作的参数传递它。我也无法在结构中进行那么深的依赖注入。
那么如何访问记录器呢?
【问题讨论】:
-
logger 应该定义在比 UI 更低的项目中,否则你所有的其他层都直接或间接地依赖于 UI 层,这是不理想的。您可以创建另一个库,例如
MyApp.Common,然后将记录器移到那里。 -
什么是“
logger”?它是您自己创造的,还是您使用Microsoft.Extensions.Logging门面? -
@ChrisPratt 是的,基本上是 Microsoft.Extensions.Logging 记录器工厂。特别是 Serilog 作为提供者。
-
为什么不能对数据库访问逻辑使用依赖注入?如果您将
ILogger<T>注入 db 服务的构造函数(即使它是单例),那么记录器将负责记录范围 - ASP.NET Core 将为每个请求设置一个记录范围。 -
@Sam 这就是我最终所做的。到目前为止效果很好。
标签: c# asp.net-core .net-core