首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何访问下游对象中的Logger对象?

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

Stack Overflow用户
提问于 2019-04-24 02:40:25
回答 1查看 52关注 0票数 1

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

MyApp.UI项目调用,MyApp.BusinessRules调用,MyApp.ServiceLayer调用,MyApp.DbAccess项目调用。

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

那么,如何访问记录器呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 02:51:01

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

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

如果你真的想一直往下传递你的记录器,你可以在方法中使用Action作为参数,并通过你想要在下游调用的方法调用来传递一个lambda。

代码语言:javascript
复制
    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");
            }
        }
    }

调用代码

代码语言:javascript
复制
Logger logger = new Logger();
Business business = new Business();

business.DoWork(-1, (message) => logger.Log(message));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55817509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档