为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
拉丁的传说 2022-12-24 14:49:47
考虑 .NET Core Web 项目的以下项目结构。MyApp.UI 项目 (MVC) 调用 MyApp.BusinessRules 调用 MyApp.ServiceLayer 调用 MyApp.DbAccess 项目调用。在前端项目 (MyApp.UI) 中,我定义了logger. 我想访问loggerMyApp.DbAccess 项目(或任何下游项目)中的这个实例,而不通过控制器操作中的参数向上传递它。我也不能在结构深处进行依赖注入。那么如何访问记录器呢?
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

不应在 UI 层中定义记录器。这是一个横切关注点,因此您应该在外部库中定义它,并在您需要记录的所有项目中引用它。

如果你只想记录异常,你可以定义一个全局异常处理程序,让异常冒泡到 UI 层并在那里记录它们。这里的例子

如果你真的想一直向下传递你的记录器,你可以Action在方法中使用 as 参数,并传递一个带有你想要在下游调用的方法调用的 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));


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 57 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信