我有习惯将记录器传递给构造函数,如:
public class OrderService : IOrderService {
public OrderService(ILogger logger) {
}
}
Run Code Online (Sandbox Code Playgroud)
但这很烦人,所以我已经使用了它一段时间了:
private ILogger logger = NullLogger.Instance;
public ILogger Logger
{
get { return logger; }
set { logger = value; }
}
Run Code Online (Sandbox Code Playgroud)
这也很烦人 - 它不干,我需要在每个班级重复这个.我可以使用基类,但是再次 - 我正在使用Form类,所以需要FormBase等等.所以我认为,暴露ILogger的单例会有什么不利因素,所以我们知道在哪里得到logger:
Infrastructure.Logger.Info("blabla");
Run Code Online (Sandbox Code Playgroud)
更新:正如Merlyn正确注意到的那样,我应该提一下,在第一和第二个例子中,我正在使用DI.
我想在我的asp.net MVC 5项目中创建一个日志框架.我的Startup类看起来像这样:
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我查看ASP.Net MVC Core项目时,Startup类是这样的:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
Run Code Online (Sandbox Code Playgroud)
是否可以在MVC 5中包含ILoggerFactory?如果可以,我应该如何初始化/注册它?是否需要在global.asax或Startup中完成?