Чтобы использовать Logger
в конструкторе, введите RecordManager
и введите-конструктор ILogger
.
Pro: Clean.
Con: 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");
}
}
Альтернатива: Inject IIocResolver
, resol RecordManager
и constructor-inject ILogger
.
Pro: область действия, аналогичная new
.
Con: Verbose.
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");
}
}