asp.net – 在global.asax中注册并使用Unity的记录器
发布时间:2020-12-16 03:47:32 所属栏目:asp.Net 来源:网络整理
导读:我正在使用Unity,我注册了一个这样的记录器: public class MvcApplication : System.Web.HttpApplication{ private ILogger _logger; protected void Application_Start() { ... var container = new UnityContainer(); container.RegisterTypeILogger,NLog
我正在使用Unity,我注册了一个这样的记录器:
public class MvcApplication : System.Web.HttpApplication { private ILogger _logger; protected void Application_Start() { ... var container = new UnityContainer(); container.RegisterType<ILogger,NLogLogger>(); container.RegisterControllers(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); _logger = container.Resolve<ILogger>(); _logger.Info("Application started"); } 这似乎工作正常 – 消息被记录. protected void Application_End() { _logger.Info("App is shutting down"); } protected void Application_Error() { Exception lastException = Server.GetLastError(); _logger.Fatal(lastException); } 但是,这会引发异常 – _logger为null.我怀疑我在使用Unity做错了什么 – 那么在global.asax中使用记录器的正确方法是什么? 解决方法
您实际上希望在使用它的每个方法中从DependencyResolver重新解析它.如果您使用应用程序范围的LifetimeManager,那么您不应该从构造函数中获得任何重大性能损失.如果你没有使用应用程序范围的LiftimeManager,那么至少你不会遇到NullReferenceException!
protected void Application_End() { var logger = DependencyResolver.Current.GetService<ILogger>(); if(logger != null) { logger.Info("App is shutting down"); } } protected void Application_Error() { Exception lastException = Server.GetLastError(); var logger = DependencyResolver.Current.GetService<ILogger>(); if(logger != null) { logger.Fatal(lastException); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-web-api – ASP.NET Web API中的错误HTTP响应代码
- asp.net – NHibernate – 访问同一数据库的两个SessionFac
- asp.net – 如何在Dotnetnuke中更改Radcaptcha的音频文件
- asp.net – 添加runat =“server”会改变布局的行为
- asp.net-mvc – 添加MVC控件或视图时,Visual Studio 2015“
- asp.net-mvc – 使用缓存配置文件缓存ChildActions将不起作
- asp.net – 为什么我的验证在MVC3中的帖子之前触发了get请求
- asp.net-mvc – 在ASP.NET MVC 3中用逻辑构建子视图的好方法
- 如何在ASP.NET MVC 4 Beta中禁用Javascript/CSS缩小
- asp.net – 跨线程使用HTTPContext