6
我在ASP.NET MVC 3應用程序中需要一些注入其中的操作過濾器。我使用Autofac.Mvc3作爲依賴注入器。Autofac未填充操作過濾器屬性
根據the 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
屬性爲空。
我錯過了什麼?
謝謝!現在,我只是直接在過濾器中調用'DependencyResolver.Current.GetService(Of TraceSource)',但稍後我會嘗試您的建議。 – 2012-04-13 05:47:05
上述C#中的答案: 'builder.Register(C =>新MyHandleErrorAttribute())\t \t \t \t .AsExceptionFilterFor().InstancePerHttpRequest();' –
Pete
2014-02-03 19:01:06
和的情況下,如果它不是一個錯誤動作濾波器,註冊將如下所示: builder.Register(c => new SomeGlobalActionFilter()) .AsActionFilterFor().PropertiesAutowired()。InstancePerRequest(); –
Sergey
2015-01-07 11:26:16