我对使用 IOC 容器还是有点陌生,而且有点挣扎。我正在使用 ASP.NET MVC 5.2 和 Ninject.MVC3。我有一个异常过滤器,基本上将其交给日志服务:
public class ExceptionLoggerFilter : IExceptionFilter
{
private readonly ILogService _logService;
public ExceptionLoggerFilter(ILogService logService) {
_logService = logService;
}
public void OnException(ExceptionContext filterContext) {
_logService.LogError(filterContext.Exception);
}
}
我想使用依赖注入来获取日志服务的实例。但是,RegisterGlobalFilters 方法是静态的:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ExceptionLoggerFilter(???));
}
}
我可以使用 FilterConfig 的静态构造函数,但这感觉不是一个好的解决方案。
我尝试在 ExceptionLoggerFilter 类中使用属性注入,但它不起作用(LogService 始终为 null):
[Inject]
public ILogService LogService { get; set; }
我已经阅读了有关使用 Factory 模式的内容,但它似乎没有帮助,因为我仍然需要将 Factory 类注入 FilterConfig 类的静态构造函数中。我可能是错的,但这也不是正确的解决方案。
目前,我使用 just-give-me-an-instance 方法:
var logService = (ILogService)DependencyResolver.Current.GetService(typeof(ILogService));
filters.Add(new ExceptionLoggerFilter(logService));
这可行,但这是一个好的解决方案吗?有没有更好的办法?我对依赖注入和 IOC 容器的想法是否都混乱了?