我遇到了在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
的依赖关系。
答案 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