Asp.net mvc 3 MVC3:在记录器类上添加依赖项的合适位置?
我有一个带有简单日志服务的MVC3应用程序。我的所有服务都是使用Microsoft的Unity Dependency Injection容器调用的 对于大多数方法,我忽略异常;它们被捕获在一个顶级错误处理程序中,该处理程序对它们进行分类并决定是否记录它们,生成我想要的HTTP响应,并在错误控制器上调用一个操作方法以返回我的custiom错误页面 有时候,虽然,我不想那样做;我想在发生异常的地方处理异常,例如在我的控制器中。在这种情况下,我希望在替换适当的默认值并继续控制器的逻辑之前记录错误 我在一个地方做到了这一点:在我的控制器中,我添加了:Asp.net mvc 3 MVC3:在记录器类上添加依赖项的合适位置?,asp.net-mvc-3,logging,dependency-injection,Asp.net Mvc 3,Logging,Dependency Injection,我有一个带有简单日志服务的MVC3应用程序。我的所有服务都是使用Microsoft的Unity Dependency Injection容器调用的 对于大多数方法,我忽略异常;它们被捕获在一个顶级错误处理程序中,该处理程序对它们进行分类并决定是否记录它们,生成我想要的HTTP响应,并在错误控制器上调用一个操作方法以返回我的custiom错误页面 有时候,虽然,我不想那样做;我想在发生异常的地方处理异常,例如在我的控制器中。在这种情况下,我希望在替换适当的默认值并继续控制器的逻辑之前记录错误 我在
var logService = DependencyResolver.Current.GetService<ILogService>();
try { /* something indeterminate */ }
catch ( Exception ex ) {
logService.LogException(category, ex);
/* do something else instead */
}
var logService=dependencysolver.Current.GetService();
尝试{/*不确定的事物*/}
捕获(例外情况除外){
logService.LogException(类别,ex);
/*做点别的吧*/
}
现在,我想在该控制器中再做一次(正如它发生的那样,稍后使用相同的方法)。当我再次这样做时,我发现是时候重构了,因为我在重复我自己
使我的记录器可供控制器使用的最佳方法是什么?我的控制器都继承自自定义控制器库;我的第一个想法是将它添加到ControllerBase的构造函数中。但是:
在哪里可以为我的所有控制器提供服务?将其放在您的构造函数中。您甚至可以将其放置在
BaseController
中
理想情况下,您将使用依赖项注入,并将其引入控制器。如果IoC容器支持,控制器可以有参数
private readonly ILogService logService;
public MyController(ILogService logService)
{
this.logService = logService;
}
将其放入构造函数中。您甚至可以将其放置在
BaseController
中
理想情况下,您将使用依赖项注入,并将其引入控制器。如果IoC容器支持,控制器可以有参数
private readonly ILogService logService;
public MyController(ILogService logService)
{
this.logService = logService;
}
我不会将它添加到基本控制器中,唯一的原因是它听起来好像只是偶尔使用它。我会像Daniel White在控制器的构造函数中建议的那样添加它。如果它看起来像是在大多数控制器中使用它,那么我会考虑把它移到基座。 < P>我不会把它添加到基础控制器中,唯一的原因是听起来好像你只是偶尔使用它。我会像Daniel White在控制器的构造函数中建议的那样添加它。如果它看起来像是在大多数控制器中使用它,那么我会考虑把它移到底座上。那很好,天空没有落在我的头上!谢谢——我一直在看所有这些关于无参数构造函数的讨论,我认为这是MVC框架的一个限制,而不是DI容器。这很好,天空没有落到我头上!谢谢——我一直在看关于无参数构造函数的讨论,并认为这是MVC框架的一个限制,而不是DI容器。