1

我正在使用全局 ErrorHandler 过滤器来记录未处理的异常,但我也希望能够使用相同的处理程序从 catch 块中记录已处理的异常。

我想访问全局过滤器并按照配置执行 ErrorHandler,但我在执行此操作时遇到了一些困难。我尝试了以下方法,但 Resharper 告诉我过滤器永远不可能是我的 ErrorLogFilter。

foreach (var filter in GlobalFilters.Filters)
{
    if (filter is ErrorLogFilter) // Static analysis tells me this can never be an ErrorLogFilter
    {
        // want to execute the filter
    }
}

ErrorLogFilter 被添加到全局过滤器中,如下所示:

GlobalFilters.Filters.Add(new ErrorLogFilter(provider));

ErrorLogFilter(作为 Elfar 的一部分,类似于 Elmah,但用于 MVC)定义为:

public class ErrorLogFilter : FilterAttribute, IExceptionFilter

关于如何做到这一点的任何建议?

4

1 回答 1

1

GlobalFilters.Filters是一个GlobalFilterCollection,其中包含Filter,它们是添加的 s 的包装器IMvcFilter

试试这个:

foreach (var filter in GlobalFilters.Filters)
{
    if (filter.Instance is ErrorLogFilter)
    {
        // want to execute the filter
    }
}

所以 Reshaper 是正确的,表明没有ErrorLogFilterin GlobalFilters.Filters

于 2012-05-10T20:35:27.547 回答