我在 ASP.NET MVC 3 应用程序中有一个操作过滤器,需要将一些依赖项注入其中。我使用 Autofac.Mvc3 作为依赖注入器。
根据autofac wiki,我只需要注册我想要注入的类型,调用RegisterFilterProvider
并在我的操作过滤器上放置一个公共属性,然后 autofac 将在过滤器实例化期间用正确的对象填充该属性。
这是我的操作过滤器的一部分:
Public Class LogActionAttribute
Inherits ActionFilterAttribute
Property tracer As TraceSource
Public Overrides Sub OnActionExecuting(filterContext As System.Web.Mvc.ActionExecutingContext)
...
tracer.TraceData(...)
...
End Sub
End Class
这是我的 global.asax 的一部分:
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterGlobalFilters(ByVal filters As GlobalFilterCollection)
filters.Add(New MyHandleErrorAttribute)
filters.Add(New LogActionAttribute)
End Sub
Sub Application_Start()
InitSettingRepoEtc()
...
End Sub
Protected Shared Sub InitSettingRepoEtc()
...
Dim builder = New ContainerBuilder
builder.RegisterControllers(Reflection.Assembly.GetExecutingAssembly)
...
builder.Register(Of TraceSource)(
Function(x) New TraceSource("requests", SourceLevels.All)).InstancePerHttpRequest()
...
builder.RegisterFilterProvider()
Dim container = builder.Build
DependencyResolver.SetResolver(New AutofacDependencyResolver(container))
...
End Sub
End Class
我已经SetResolver
在尝试后立即设置断点:
DependencyResolver.Current.GetService(Of TraceSource)
而且我成功从autofac得到了一个TraceSource对象,所以注册好像没问题。
但期间OnActionExecuting
我的tracer
财产是空的。
我错过了什么?