Reputation: 135
I am using Unity.WebAPI on my project when I try to call DependencyResolver on attribute is return null. Here is my code:
[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);
...
}
}
Upvotes: 2
Views: 798
Reputation: 135
To Janki
I found the answer, you need to register the filter in place you defined the dependency injection container. Here is an example:
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);
}
Then in WebApiConfig.cs
, add this line of code:
UnityConfig.RegisterFilterProviders(config);
Upvotes: 1
Reputation: 135
I found the solution:
[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
Upvotes: 0