Autofac не заполняет свойство фильтра действий.

У меня есть фильтр действий в приложении 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)

И я успешно получил TraceSource объект из autofac, так что с регистрацией все в порядке.

Но во время OnActionExecutingмоя tracerсобственность пуста.

Что я пропустил?

6
задан Endy Tjahjono 11 April 2012 в 12:07
поделиться