我有一个旧版 Web.Forms 应用程序已部分重写为 MVC。MVC 部分使用 autofac 作为依赖注入容器。
MVC 部分定义了自定义过滤器:
public class CustomActionFilter : ActionFilterAttribute
{
protected ILogger Logger { get; set; }
public CustomActionFilter(ILogger logger) { Logger = logger; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Logger.Log("OnActionExecuting");
}
}
在 web.config 中禁用 Web.Forms 集成时,它可以正常工作。然而,当我尝试使用 Web.Forms autofac 集成时,我得到了与AutofacFilterProvider
autofac 内部(堆栈跟踪)中某处相关的 NullReferenceException。
- Global.asax.cs: http: //pastebin.com/437Tnp0t
- web.config: http: //pastebin.com/5pU6SH6c
请注意,它CustomActionFilter
已注册为全局过滤器,因此它是使用 autofac 注册的:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(DependencyResolver.Current.GetService<CustomActionFilter>());
}
}
我试过了:
- 为 MVC 和 Web.Forms 使用单独的容器 - 结果相同
- 使用属性注入而不是构造函数 - 结果相同
- 在 web.forms 页面上显式触发依赖项解析(像这样) - 有效
所以,问题是,有没有办法为 MVC 和 web.forms 部分提供幕后依赖解析。我是 autofac 的新手,对依赖注入容器也有些陌生,所以我可能会错过一些明显的东西。
更新:错误与自定义过滤器无关。如果我删除对自定义过滤器的所有引用,则错误行为仍然相同,甚至堆栈跟踪也是如此。