I have a simple MVC application in which I am trying to add an exception filter. To do this, I completed the Autofac WebAPI Integration Documentation , which, I believe, refers to the Autofac.WebApi2 NuGet package.
First, I created an exception filter :
public class ErrorLoggingExceptionFilter : IAutofacExceptionFilter
{
public void OnException(HttpActionExecutedContext context)
{
}
}
Then I added the AutofacControllerConfiguration attribute to my base class of the API controller, which I want the exception filter to apply to:
[AutofacControllerConfiguration]
public class ApiControllerBase : ApiController {}
Then I registered an exception filter with Autofac:
builder.RegisterType<ErrorLoggingExceptionFilter>()
.AsWebApiExceptionFilterFor<ApiControllerBase>()
.InstancePerApiRequest();
, , :
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
, 500 :
None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Autofac.Features.Metadata.Meta1[System.Web.Http.Filters.IOverrideFilter]' can be invoked with the available services and parameters: Cannot resolve parameter 'System.Web.Http.Filters.IOverrideFilter value' of constructor 'Void .ctor(System.Web.Http.Filters.IOverrideFilter, System.Collections.Generic.IDictionary 2 [System.String, System.Object]) ' > .
IOverrideFilter.
, ?
ASP.NET MVC 5.1, Autofac WebApi NuGet:
<package id="Autofac" version="3.2.0" targetFramework="net45" />
<package id="Autofac.Mvc5" version="3.2.0" targetFramework="net45" />
<package id="Autofac.WebApi2" version="3.2.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi" version="5.1.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.1.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.1.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.HelpPage" version="5.1.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.1" targetFramework="net45" />
Autofac 3.3.
, , RegisterWebApiFilterProvider, , , . , , Google .
, :
None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Autofac.Features.Metadata.Meta`1[System.Web.Http.Filters.IOverrideFilter]' can be invoked with the available services and parameters: Cannot resolve parameter 'System.Web.Http.Filters.IOverrideFilter value' of constructor 'Void .ctor(System.Web.Http.Filters.IOverrideFilter, System.Collections.Generic.IDictionary`2[System.String,System.Object])'.
at
Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters) at
Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters) at
Autofac.Core.Resolving.InstanceLookup.Execute() at
Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters) at
System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() at
System.Linq.Buffer`1..ctor(IEnumerable`1 source) at
System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) at
Autofac.Features.Collections.CollectionRegistrationSource.<>c__DisplayClass4.<RegistrationsFor>b__0(IComponentContext c, IEnumerable`1 p) at
Autofac.Core.Activators.Delegate.DelegateActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters) at
Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters) at
Autofac.Core.Resolving.InstanceLookup.Execute() at
Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters) at
Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable`1 parameters) at
Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters) at
Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters) at
Autofac.Integration.WebApi.AutofacWebApiFilterProvider.ResolveControllerScopedOverrideFilter(FilterContext filterContext, String metadataKey) at
Autofac.Integration.WebApi.AutofacWebApiFilterProvider.GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor) at
System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() at
System.Linq.Buffer`1..ctor(IEnumerable`1 source) at
System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext() at
System.Linq.Buffer`1..ctor(IEnumerable`1 source) at
System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext() at
System.Web.Http.Controllers.HttpActionDescriptor.<RemoveDuplicates>d__3.MoveNext() at
System.Linq.Buffer`1..ctor(IEnumerable`1 source) at
System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext() at
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at
System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at
System.Web.Http.Controllers.HttpActionDescriptor.InitializeFilterPipeline() at
System.Lazy`1.CreateValue() at
System.Lazy`1.LazyInitValue() at
System.Web.Http.Controllers.HttpActionDescriptor.GetFilterPipeline() at
System.Web.Http.Controllers.HttpActionDescriptor.GetFilterGrouping() at
System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) at
System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken) at
System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()