我在 ASP.NET MVC 应用程序中使用 Ninject 用于 DI 。我正在使用以下模块解析控制器中的ILog
依赖关系
public override void Load()
{
var configPath = ConfigurationManager.AppSettings["Log4NetConfigPath"];
// Load the external config file for Log4Net
XmlConfigurator.Configure(new System.IO.FileInfo(configPath));
log4net.Util.LogLog.InternalDebugging = true;
Bind<ILog>().ToMethod((c) => LogManager.GetLogger("AVLogger")).InSingletonScope();
}
我正在调用InSingletonScope
()在整个应用程序中提供ILog
实例的单个实例。我有一些问题吗?
我是否真的需要为ILog
的单个实例而烦恼?我可以删除InSingletonScope
方法本身。
让ILog
的单个实例产生一些性能问题吗?
答案 0 :(得分:1)
这取决于创建记录器的成本。我不知道log4net的性能特征是什么,但如果它不贵,你应该创建一个新的。
当您使用InSingletonScope()时,这意味着只要您的工作进程存在(即,当它被回收或关闭时,记录器将被销毁),该日志将存在。这也意味着当你不需要它时,记录器就会徘徊。这不是一个“性能”问题,因为它是管理资源的问题。