Mat*_*ear 8 asp.net unity-container
我正在使用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");
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常 - 消息被记录.稍后在global.asax.cs中我有这个:
protected void Application_End()
{
_logger.Info("App is shutting down");
}
protected void Application_Error()
{
Exception lastException = Server.GetLastError();
_logger.Fatal(lastException);
}
Run Code Online (Sandbox Code Playgroud)
但是,这会引发异常 - _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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3333 次 |
| 最近记录: |