使用注入的记录器登录类

时间:2018-06-01 15:58:20

标签: c# asp.net-mvc logging dependency-injection aspnetboilerplate

我遇到了在ASP.NET Boilerplate MVC项目中实现Web项目中的类的日志记录问题。日志记录在Web项目和Application项目中的控制器中按预期工作,但不在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类,但我收到一个不同的错误,说它不满足字符串sessionID的依赖关系。

1 个答案:

答案 0 :(得分:0)

要在构造函数中使用ServerMessageType,请注入Logger和constructor-inject RecordManager

亲:清洁。
Con: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

Pro:范围与ILogger类似。
骗局:详细。

new