Asp.net mvc Autofac注入到自定义Web Api FilterAttribute
我有一个自定义ExceptionFilter,它记录Web Api控制器中所有未捕获的异常。我想使用Autofac,向它注入ILog配置 我的问题是如何做到这一点?Autofac网站几乎没有解释如何做到这一点 自定义筛选器:Asp.net mvc Autofac注入到自定义Web Api FilterAttribute,asp.net-mvc,asp.net-web-api,inversion-of-control,autofac,Asp.net Mvc,Asp.net Web Api,Inversion Of Control,Autofac,我有一个自定义ExceptionFilter,它记录Web Api控制器中所有未捕获的异常。我想使用Autofac,向它注入ILog配置 我的问题是如何做到这一点?Autofac网站几乎没有解释如何做到这一点 自定义筛选器: public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute { private static readonly ILog log = LogManager.GetLogger("
public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute
{
private static readonly ILog log = LogManager.GetLogger("ApiLog");
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
log.Error("Error: ", actionExecutedContext.Exception);
}
}
p、 美国。
为了澄清,我还为普通控制器定制了一个过滤器,并且我能够成功地配置它
正常控制器的过滤器:
public class ControllerErrorFilterAttribute : HandleErrorAttribute
{
public ICustomLogSettings Log { get; set; }
public override void OnException(ExceptionContext filterContext)
{
Log.GetLogger.Error("Error: ", filterContext.Exception);
}
}
日志配置:
builder.Register(c => new BaseLog()).As<ICustomLogSettings>().InstancePerRequest();
builder.RegisterFilterProvider();
builder.Register(c=>newbaselog()).As().InstancePerRequest();
builder.RegisterFilterProvider();
有些可能会有所帮助,尤其是:
builder.registerWebAPI过滤器提供程序(GlobalConfiguration.Configuration);
注册(c=>newmywebapifilter())
.AsWebApiActionFilterFor()
.InstancePerApiRequest();
从这一点上,它向我展示了您可以注册一个过滤器,该过滤器可以像任何其他服务一样得到解决,这意味着您应该能够做到:
公共类ApiControllerErrorFilterAttribute:ExceptionFilterAttribute
{
专用只读ILog\u日志
公共ApiControllerErrorFilterAttribute(ILog日志)
{
_log=log;
}
public override void OneException(HttpActionExecuteContext ActionExecuteContext)
{
_log.Error(“错误:”,ActionExecuteContext.Exception);
}
}
然后可以这样注册:
builder.RegisterType.必须将IautoFaceExceptionFilter接口添加到我的过滤器中,并将AsWebApiationFilterFor更改为AsExceptionFilterFor,但除此之外,它的工作就像一个符咒。谢谢