public class SmWebApiFilterProvider : ActionDescriptorFilterProvider, IFilterProvider
{
private readonly IContainer _container;
public SmWebApiFilterProvider(IContainer container)
{
_container = container;
}
public new IEnumerable<FilterInfo> GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor)
{
var filters = base.GetFilters(configuration, actionDescriptor);
foreach (var filter in filters)
{
_container.BuildUp(filter.Instance);
yield return filter;
}
}
}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var container = /* your container */;
config.Services.Replace(typeof(IFilterProvider), new SmWebApiFilterProvider(container));
I tried this approach and got one step ahead now my break point on getFlters method getting hit but still my filter property is null
public class MvcLogFilterAttribute : ActionFilterAttribute
{
public ISwiftDemoUow uow { get; set; }
public MvcLogFilterAttribute()
{
}
public MvcLogFilterAttribute(ISwiftDemoUow _uow)
{
this.uow = _uow;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var gg = uow;
base.OnActionExecuting(filterContext);
}
}c.Policies.SetAllProperties(x =>
x.Matching(p =>
p.DeclaringType.CanBeCastTo(typeof(System.Web.Http.Filters.ActionFilterAttribute)) &&
p.DeclaringType.Namespace.StartsWith("MyProjectName") &&
!p.PropertyType.IsPrimitive &&
p.PropertyType != typeof(string)));