使用注入的记录器登录类

斯里达尔·瑞沙布

我在 ASP.NET Boilerplate MVC 项目的 Web 项目中实现类中的日志记录时遇到问题。日志记录在 Web 项目和应用程序项目中的控制器中按预期工作,但在RecordManager课堂上没有它不会抛出任何错误,也不会在RecordManager类中记录任何内容

public class MainController : Controller
{
    public Castle.Core.Logging.ILogger Logger { get; set; }

    public ActionResult Index(string SessionID)
    {
        Logger.Info("MainController - inside Index");
        var recordMgr = new RecordManager(SessionID);
        recordMgr.PushRecords();
    }
}

public class RecordManager
{
    public ILogger Logger { get; set; }
    private string _sessionID = string.Empty;

    public RecordManager(string sessionID)
    {
        _sessionID = sessionID;
        Logger = NullLogger.Instance;
        Logger.Info("RecordManager - inside constructor");
    }

    public void PushRecords()
    {
        Logger.Info("RecordManager - PushRecords - start");
    }
}

试图RecordManager手动注册类,但我收到一个不同的错误,说它不满足 string 的依赖关系sessionID

亚伦

Logger在构造函数中使用,请注入RecordManager和构造函数注入ILogger

亲:干净。
缺点:SessionID有公共二传手。

public class MainController : Controller
{
    public ILogger Logger { get; set; }
    public RecordManager _recordMgr { get; set; } // Add

    public ActionResult Index(string SessionID)
    {
        Logger.Info("MainController - inside Index");
        _recordMgr.SessionID = SessionID; // Modify
        _recordMgr.PushRecords(); // Modify
    }
}

public class RecordManager : ITransientDependency // Modify
{
    public ILogger Logger { get; set; }
    public string SessionID { get; set; } = string.Empty; // Modify

    public RecordManager(ILogger logger) // Modify
    {
        // _sessionID = sessionID; // Remove
        Logger = logger; // Modify
        Logger.Info("RecordManager - inside constructor");
    }

    public void PushRecords()
    {
        Logger.Info("RecordManager - PushRecords - start");
    }
}

替代方案:注入IIocResolver、解析RecordManager和构造函数注入ILogger

优点:范围类似于new.
缺点:冗长。

public class MainController : Controller
{
    public ILogger Logger { get; set; }
    public IIocResolver IocResolver { get; set; } // Add

    public ActionResult Index(string SessionID)
    {
        Logger.Info("MainController - inside Index");
        using (var wrapper = IocResolver.ResolveAsDisposable<RecordManager>(new { sessionID = SessionID })) // Modify
        {
            var recordMgr = wrapper.Object; // Add
            recordMgr.PushRecords();
        }
    }
}

public class RecordManager : ITransientDependency // Modify
{
    public ILogger Logger { get; set; }
    private string _sessionID = string.Empty;

    public RecordManager(string sessionID, ILogger logger) // Modify
    {
        _sessionID = sessionID;
        Logger = logger; // Modify
        Logger.Info("RecordManager - inside constructor");
    }

    public void PushRecords()
    {
        Logger.Info("RecordManager - PushRecords - start");
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法注入记录器

来自分类Dev

无法使用NestJS注入Winston的记录器实例

来自分类Dev

使用NLog时应该继承类记录器吗?

来自分类Dev

在子类中使用父类记录器

来自分类Dev

每个记录器的动态登录文件

来自分类Dev

登录后异步记录器

来自分类Dev

使通常注入的记录器进入在DI容器之外创建的类有哪些选择?

来自分类Dev

记录器依赖项注入,获取调用类名称和源文件路径

来自分类Dev

src / groovy类中的记录器

来自分类Dev

记录器类的QFile和QTextStream

来自分类Dev

使用带有Guice依赖项注入的JClouds创建自定义记录器

来自分类Dev

温莎城堡-将记录器注入IErrorHandler

来自分类Dev

为什么无法将记录器服务注入CompilerPass?

来自分类Dev

在.NET中使用记录器时,为什么要使用硬编码类名?

来自分类Dev

重新登录忽略父包的记录器

来自分类Dev

重新登录从根目录排除记录器

来自分类Dev

Twisted记录器可以登录UTC吗?

来自分类Dev

将Mule登录到非root记录器

来自分类Dev

登录模块:找不到记录器的处理程序

来自分类Dev

使用Javassist记录方法调用和参数值,如何使记录器类在每个检测类中可见?

来自分类Dev

库使用的不同记录器

来自分类Dev

使用Spring添加记录器

来自分类Dev

如何使用Zeitgeist活动记录器

来自分类Dev

使用 Java 的按键记录器

来自分类Dev

如何在Singleton类,Simple Injector中使用瞬态记录器

来自分类Dev

如何在Singleton类,Simple Injector中使用瞬态记录器

来自分类Dev

全局名称记录器不是通过类定义的吗?

来自分类Dev

NLog同一类中的多个记录器

来自分类Dev

简单的记录器类,但是抛出空指针异常?

Related 相关文章

热门标签

归档