У меня проблема с использованием autofac для веб-API. У меня есть собственный ExceptionFilterAttribute, который переопределяет OnException для регистрации и обработки любых исключений, которые могут возникнуть. ExceptionFilterAttribute применяется к одному классу ApiController.
Код фильтра выглядит следующим образом:
public class ExceptionFilterAttribute : ExceptionFilterAttribute, IAutofacExceptionFilter
{
private ILogger _logger;
public ExceptionFilterAttribute()
{
}
public ExceptionFilterAttribute(ILogger logger)
{
_logger = logger;
}
public override void OnException(HttpActionExecutedContext context)
{
// Removed for brevity
}
}
В конфигурации autofac зарегистрировано много типов, которые я удалил ниже, где они похожи:
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<ReflectionClassReader>().As<IClassReader>();
builder.RegisterType<Logger>().As<ILogger>();
builder.RegisterModule<DataModule>();
builder.Register(c => new ExceptionFilterAttribute(c.Resolve<ILogger>()))
.AsWebApiExceptionFilterFor<ApiController>().SingleInstance();
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
var container = builder.Build();
configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
Когда возникает исключение и всплывает в ApiController, метод ExceptionFilterAttribute.OnException вызывается дважды. При первом вызове _logger корректно заполняется Autofac; во-вторых, _logger имеет значение null.
Я не могу понять, почему это вызывается дважды. При отладке нет трассировки стека, поскольку это атрибут.
Я могу только предположить, что он вызывается дважды из-за какой-то конфигурации autofac, которую я сделал, но я полностью застрял. Я пытался изменить порядок конфигурации в соответствии с некоторыми примерами, которые я нашел в Интернете, но безрезультатно.
Единственная реальная информация, которую я нашел об использовании IAutofacExceptionFilter с webapi, была на http://alexmg.com/post/2012/09/01/New-features-in-the-Autofac-MVC-4-и-Web-API-%28Beta%29-Integrations.
У кого-нибудь есть идеи? Большое спасибо!