gpt4 book ai didi

asp.net-mvc - Autofac 注入(inject)自定义 Web-Api FilterAttribute

转载 作者:行者123 更新时间:2023-12-01 19:51:52 26 4
gpt4 key购买 nike

我有一个自定义的 ExceptionFilter,用于记录 Web-Api Controller 内所有未捕获的异常。我想使用 Autofac,向其注入(inject) ILog 配置。

我的问题是如何做到这一点? Autofac 网站几乎没有解释如何执行此操作。

自定义过滤器:

public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute
{
private static readonly ILog log = LogManager.GetLogger("ApiLog");
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
log.Error("Error: ", actionExecutedContext.Exception);
}
}

附:为了澄清起见,我还有一个用于普通 Controller 的自定义过滤器,并且我能够成功配置它。

普通 Controller 的过滤器:

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();

最佳答案

一些these examples可能会有所帮助,尤其是:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

builder.Register(c => new MyWebApiFilter())
.AsWebApiActionFilterFor<ValuesController>()
.InstancePerApiRequest();

从中,它向我表明您可以注册一个像任何其他服务一样得到解析的过滤器,这意味着您应该能够执行以下操作:

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);
}
}

然后就可以像这样注册它:

builder.RegisterType<ApiControllerErrorFilterAttribute>()
.AsWebApiActionFilterFor<ValuesController>()
.InstancePerApiRequest();

当然,你需要设置解析ILog的注册,这将与this part of the wiki非常相似。 .

关于asp.net-mvc - Autofac 注入(inject)自定义 Web-Api FilterAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25484150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com