0
我有一个简单的WebAPI行动(例外)过滤器...的WebAPI行为过滤依赖注入
public class LogExceptionAttribute : ExceptionFilterAttribute
{
[Dependency]
public ILogger Logger { get; set; }
public override void OnException(HttpActionExecutedContext context)
{
Logger.Fatal(context.Exception, "Critical exception in request to WebApi controller.");
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent("Internal Server Error."),
ReasonPhrase = "Critical Exception"
});
}
}
一支团结过滤器供应商...
public class UnityFilterProvider : IFilterProvider
{
private IUnityContainer _container;
private readonly ActionDescriptorFilterProvider _defaultProvider = new ActionDescriptorFilterProvider();
public UnityFilterProvider(IUnityContainer container)
{
_container = container;
}
public IEnumerable<FilterInfo> GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor)
{
var attributes = _defaultProvider.GetFilters(configuration, actionDescriptor);
foreach (var attr in attributes)
{
_container.BuildUp(attr.Instance.GetType(), attr.Instance);
}
return attributes;
}
}
而下面配置为统一...
var providers = config.Services.GetFilterProviders().ToList();
config.Services.Add(typeof(IFilterProvider), new UnityFilterProvider(container));
var defaultprovider = providers.Single(i => i is ActionDescriptorFilterProvider);
config.Services.Remove(typeof(IFilterProvider), defaultprovider);
var logger = LogFactory.CreateWebApiLogger();
container.RegisterInstance<ILogger>(logger);
当将[LogException]
属性应用于cont滚动,依赖注入正常工作,并且异常过滤器中可用的ILogger实例。
然而,当我试图全局配置过滤器...
config.Filters.Add(new LogExceptionAttribute());
的依赖性还没有解决,我得到一个空引用异常,同时试图从过滤器中访问ILogger实例。
我错过了什么?
在System.Web.Http.dll中发生类型'System.ArgumentNullException'的异常,但未在用户代码中处理 –
我做了一个追加 – granadaCoder
我不认为有可能使用构造函数注入与actionfilterattribute? –