我有在ASP.NET MVC 3应用程序,需要注射到它的一些依赖关系的行为过滤器。 我使用Autofac.Mvc3作为依赖注入。
根据该autofac维基我只需要注册,我想注入,调用类型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
属性为空。
我错过了什么?