Asp.net-Mvc-3
Mvc 3/Unity 2 將依賴項注入過濾器?
我如何注入以下依賴項?
public class Authenticate : AuthorizeAttribute { [Dependency] public IAuthenticate AuthenticateLibrary { get; set; } [Dependency] public ILibrary BaseLibrary { get; set; } protected override bool AuthorizeCore(HttpContextBase httpContext) { } }我正在使用 Unity 2 注入所有控制器。是否有 Unity 2 的教程並將依賴項注入過濾器?
Brad Wilson 有一個很好的關於服務位置的系列,其中包括如何創建自己的支持依賴注入的過濾器提供程序:http: //bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html (向下滾動到“向過濾器添加依賴注入”部分)。
- 複製他為 UnityFilterAttributeFilterProvider.cs 提供的程式碼。
UnitFilterAttributeFilterProvider.cs
using System.Collections.Generic; using System.Web.Mvc; using Microsoft.Practices.Unity; public class UnityFilterAttributeFilterProvider : FilterAttributeFilterProvider { private IUnityContainer _container; public UnityFilterAttributeFilterProvider(IUnityContainer container) { _container = container; } protected override IEnumerable<FilterAttribute> GetControllerAttributes( ControllerContext controllerContext, ActionDescriptor actionDescriptor) { var attributes = base.GetControllerAttributes(controllerContext, actionDescriptor); foreach (var attribute in attributes) { _container.BuildUp(attribute.GetType(), attribute); } return attributes; } protected override IEnumerable<FilterAttribute> GetActionAttributes( ControllerContext controllerContext, ActionDescriptor actionDescriptor) { var attributes = base.GetActionAttributes(controllerContext, actionDescriptor); foreach (var attribute in attributes) { _container.BuildUp(attribute.GetType(), attribute); } return attributes; } }
- 修改 global.asax.cs 的 Application_Start 以使 UnityFilterAttributeFilterProvider 成為 MVC 應用程序的過濾器提供程序。
.
protected void Application_Start() { // ... var oldProvider = FilterProviders.Providers.Single( f => f is FilterAttributeFilterProvider ); FilterProviders.Providers.Remove(oldProvider); var container = new UnityContainer(); var provider = new UnityFilterAttributeFilterProvider(container); FilterProviders.Providers.Add(provider); // ... }
- 裝飾您希望 Unity 為其註入值的屬性$$ Dependency $$屬性。然後你應該很高興。