У меня возникла проблема с использованием autofac для web api. У меня есть специальный ExceptionFilterAttribute, который переопределяет OnException для регистрации и обработки любых исключений, которые могут возникнуть. ExceptionFilterAttribute применяется к одному классу ApiController.Autofac (WebApi) IAutofacExceptionFilter OnException вызывает дважды
Код фильтра, как показано ниже:
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.
Я не могу понять, почему это называется дважды. Нет трассировки стека при отладке, поскольку это атрибут.
Я могу только предположить, что он вызывается дважды из-за некоторой конфигурации автофайла, которую я сделал, но я полностью застрял. Я попытался изменить порядок конфигурации в соответствии с некоторыми примерами, которые я нашел в Интернете, но безрезультатно.
Единственная реальная информация, которую я нашел при использовании IAutofacExceptionFilter с webapi, была http://alexmg.com/post/2012/09/01/New-features-in-the-Autofac-MVC-4-and-Web-API-%28Beta%29-Integrations.
Есть идеи? Большое спасибо!