如何访问下游对象中的 Logger 对象?

考虑 .NET Core Web 项目的以下项目结构。

MyApp.UI 项目 (MVC) 调用 MyApp.BusinessRules 调用 MyApp.ServiceLayer 调用 MyApp.DbAccess 项目调用。

在前端项目 (MyApp.UI) 中,我定义了logger. 我想访问loggerMyApp.DbAccess 项目(或任何下游项目)中的这个实例,而不通过控制器操作中的参数向上传递它。我也不能在结构深处进行依赖注入。

那么如何访问记录器呢?


拉丁的传说
浏览 60回答 1
1回答

萧十郎

不应在 UI 层中定义记录器。这是一个横切关注点,因此您应该在外部库中定义它,并在您需要记录的所有项目中引用它。如果你只想记录异常,你可以定义一个全局异常处理程序,让异常冒泡到 UI 层并在那里记录它们。这里的例子如果你真的想一直向下传递你的记录器,你可以Action在方法中使用 as 参数,并传递一个带有你想要在下游调用的方法调用的 lambda。&nbsp; public class Logger&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; public string Message { get; set; }&nbsp; &nbsp; &nbsp; &nbsp; public void Log(string message)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Message = message;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; public class Business&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; public void DoWork(int id, Action<string> logAction)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (id < 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logAction("The string is less than zero");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }调用代码Logger logger = new Logger();Business business = new Business();business.DoWork(-1, (message) => logger.Log(message));
打开App,查看更多内容
随时随地看视频慕课网APP