Str*_*los 5 asp.net-mvc inversion-of-control autofac asp.net-web-api
我有一个自定义ExceptionFilter,它记录Web-Api控制器中所有未捕获的异常.我想使用Autofac,为它注入ILog配置.
我的问题是怎么做?Autofac网站几乎没有解释如何这样做.
CustomFilter:
public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute
{
private static readonly ILog log = LogManager.GetLogger("ApiLog");
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
log.Error("Error: ", actionExecutedContext.Exception);
}
}
Run Code Online (Sandbox Code Playgroud)
ps为了澄清,我还有一个普通控制器的自定义过滤器,我能够成功配置它.
过滤正常控制器:
public class ControllerErrorFilterAttribute : HandleErrorAttribute
{
public ICustomLogSettings Log { get; set; }
public override void OnException(ExceptionContext filterContext)
{
Log.GetLogger.Error("Error: ", filterContext.Exception);
}
}
Run Code Online (Sandbox Code Playgroud)
日志配置:
builder.Register(c => new BaseLog()).As<ICustomLogSettings>().InstancePerRequest();
builder.RegisterFilterProvider();
Run Code Online (Sandbox Code Playgroud)
其中一些示例可能有所帮助,尤其是:
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
builder.Register(c => new MyWebApiFilter())
.AsWebApiActionFilterFor<ValuesController>()
.InstancePerApiRequest();
Run Code Online (Sandbox Code Playgroud)
从那以后,它告诉我你可以注册一个像其他任何服务一样得到解决的过滤器,这意味着你应该能够做到:
public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute
{
private readonly ILog _log
public ApiControllerErrorFilterAttribute(ILog log)
{
_log = log;
}
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
_log.Error("Error: ", actionExecutedContext.Exception);
}
}
Run Code Online (Sandbox Code Playgroud)
然后能够像这样注册它:
builder.RegisterType<ApiControllerErrorFilterAttribute>()
.AsWebApiActionFilterFor<ValuesController>()
.InstancePerApiRequest();
Run Code Online (Sandbox Code Playgroud)
当然,你需要设置注册以解决ILog,这与wiki的这一部分非常相似.
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |