参考这个CodePlex 统一文章 http://unity.codeplex.com/discussions/446780我能够使用 WebAPI 控制器获取过滤器属性,如下所示:
[MyFilterAttribute]
public class TestController : ApiController
{}
但是,如果我想将过滤器属性应用于具有 GlobalConfiguration 的所有操作,它将删除注入的依赖项:
public class MyFilterAttribute : ActionFilterAttribute
{
[Dependency]
public MyDependency { get; set; }
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (this.MyDependency == null) //ALWAYS NULL ON GLOBAL CONFIGURATIONS
throw new Exception();
}
}
public static class UnityWebApiActivator
{
public static void Start()
{
var resolver = new UnityDependencyResolver(UnityConfig.GetConfiguredContainer());
GlobalConfiguration.Configuration.DependencyResolver = resolver;
GlobalConfiguration.Configuration.Filters.Add(new MyFilterAttribute());
RegisterFilterProviders();
}
private static void RegisterFilterProviders()
{
var providers =
GlobalConfiguration.Configuration.Services.GetFilterProviders().ToList();
GlobalConfiguration.Configuration.Services.Add(
typeof(System.Web.Http.Filters.IFilterProvider),
new UnityActionFilterProvider(UnityConfig.GetConfiguredContainer()));
var defaultprovider = providers.First(p => p is ActionDescriptorFilterProvider);
GlobalConfiguration.Configuration.Services.Remove(
typeof(System.Web.Http.Filters.IFilterProvider),
defaultprovider);
}
}
有没有更好的地方来添加全局配置?
出现此问题的原因是您要将新的 MyFilterAttribute 添加到过滤器集合中(即:GlobalConfiguration.Configuration.Filters.Add(**new MyFilterAttribute()**)
)而不是通过 Unity 解析的实例。由于 Unity 不参与实例的创建,因此它没有注入依赖项的触发器。只需通过 Unity 解析实例即可解决此问题。例如。:
GlobalConfiguration.Configuration.Filters.Add((MyFilterAttribute)resolver.GetService(typeof(MyFilterAttribute()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)