考虑以下.NET核心Web项目的项目结构。
MyApp.UI项目调用,MyApp.BusinessRules调用,MyApp.ServiceLayer调用,MyApp.DbAccess项目调用。
在前端项目(MyApp.UI)中,我定义了logger
。我想在MyApp.DbAccess项目(或任何下游项目)中访问这个logger
实例,而不是通过控制器操作的参数传递它。我也不能在结构中做那么深的依赖注入。
那么,如何访问记录器呢?
发布于 2019-04-24 02:51:01
记录器不应该在UI层中定义。它是一个横切的关注点,因此您应该在外部库中定义它,并在所有需要日志记录的项目中引用它。
如果您只想记录异常,您可以定义一个全局异常处理程序,让异常冒泡到UI层并在那里记录它们。示例here
如果你真的想一直往下传递你的记录器,你可以在方法中使用Action
作为参数,并通过你想要在下游调用的方法调用来传递一个lambda。
public class Logger
{
public string Message { get; set; }
public void Log(string message)
{
Message = message;
}
}
public class Business
{
public void DoWork(int id, Action<string> logAction)
{
if (id < 0)
{
logAction("The string is less than zero");
}
}
}
调用代码
Logger logger = new Logger();
Business business = new Business();
business.DoWork(-1, (message) => logger.Log(message));
https://stackoverflow.com/questions/55817509
复制相似问题