2014-05-07 52 views
2

我在我的項目上使用Unity.WebAPI時,當我嘗試調用DependencyResolver屬性時返回null。 這裏是我的代碼:無法獲得統一性DependencyResolver在webapi中的工作過濾器

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)] 
public class MSIAuthorizeAttribute : AuthorizationFilterAttribute 
{ 
    private bool _perUser; 
    private ISecurityService _securityService; 

    /// <summary> 
    /// constractor for MSIAuthorizeAttribute 
    /// </summary> 
    public MSIAuthorizeAttribute(bool perUser = true) 
    { 
     _perUser = perUser; 
    } 
    public override void OnAuthorization(HttpActionContext actionContext) 
    { 
     var persistenceService = DependencyResolver.Current.GetService<IPersistenceService>(); 
     var logService = DependencyResolver.Current.GetService<ILogService>(); 
     var vbUtilities = DependencyResolver.Current.GetService<IVBUtilities>(); 
     _securityService = new SecurityService(persistenceService,logService,vbUtilities); 
     ... 
    } 
} 

回答

0

我找到了解決辦法:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)] 
public class MSIAuthorizeAttribute : System.Web.Http.Filters.ActionFilterAttribute 
{ 
    private bool _perUser; 
    private ISecurityService _securityService; 
    [Dependency] 
    public ILogService LogService { get; set; } 
    [Dependency] 
    public IVBUtilities VbUtilities { get; set; } 
    [Dependency] 
    public IPersistenceService PersistenceService { get; set; } 

    /// <summary> 
    /// constractor for MSIAuthorizeAttribute 
    /// </summary> 
    public MSIAuthorizeAttribute(bool perUser = true) 
    { 
     _perUser = perUser; 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext actionContext) 
    {...} 

http://unity.codeplex.com/discussions/446780

1

爲強奇

我找到了答案,你需要在地方註冊的過濾器,你定義了依賴注入容器。下面是一個例子:

public static void RegisterFilterProviders(HttpConfiguration config) 
{ 
    var providers = config.Services.GetFilterProviders().ToList(); 
    config.Services.Add(typeof(IFilterProvider), new UnityActionFilterProvider(GetConfiguredContainer())); 

    var defaultprovider = providers.First(p => p is ActionDescriptorFilterProvider); 
    config.Services.Remove(typeof(IFilterProvider), defaultprovider); 
} 

然後在WebApiConfig.cs,添加這行代碼:

UnityConfig.RegisterFilterProviders(config);