我在我的应用程序中使用Castle Windsor,我想在我的ExceptionFilterAttribute中使用注入一些服务示例ILog:
public class GenericExceptionFilterAttribute : ExceptionFilterAttribute
{
private readonly ILog _logger;
public GenericExceptionFilterAttribute()
{
}
public GenericExceptionFilterAttribute(ILogManager logManager)
{
_logger = logManager.GetLogger(typeof(GenericExceptionFilterAttribute));
}
}
如何在此课程中注入服务?
此致
卡洛斯
答案 0 :(得分:3)
您好了dependencyResolver来解决这个问题:
public override void OnException(HttpActionExecutedContext context)
{
var log= (ILog)context.ActionContext.ControllerContext.Configuration.DependencyResolver.GetService(typeof(ILog));
}
答案 1 :(得分:0)
Webapi有一个名为IFilterProvider
的接口,可能支持您正在寻找的行为。请查看https://stackoverflow.com/a/18325433/4711454或http://michael-mckenna.com/blog/dependency-injection-for-asp-net-web-api-action-filters-in-3-easy-steps,了解有关如何实施此功能的示例。第二个示例基于Unity,但您可以轻松地将其修改为Castle Windsor实现。我曾经尝试过这个解决方案,它确实提供了一种在动作过滤器上进行适当的构造函数注入的方法。作为替代方案,您可以切换到Castle Windsor Interceptors。我也通过创建一个拦截器来尝试这个,该拦截器为我做了异常处理并将其注册到Castle Windsor以拦截我想要的控件/动作。如果更进一步,可以扩展拦截器以检查截取的控制器或操作方法以获取自定义属性(您可以自己创建),并且只有属性存在时才进行异常处理。这样,您可以简单地将拦截器分配给所有控制器,并通过在需要时应用属性来管理各个控制器/操作上的异常处理。