C# 如何将依赖项注入System.Web.Http.AuthorizeAttribute子类?
我正在开发一个使用web API 2和Unity的ASP.NET web应用程序。我们已经用内置的子类修饰了控制器/控制器方法,以便为Web API公开的各种REST端点应用授权 我们希望能够使用Unity将依赖项注入到该属性中。我已经做了相当多的搜索,但大多数示例与我的用例相差太大,没有什么用处 如何使用Unity将依赖项注入System.Web.Http.AuthorizeAttribute子类?C# 如何将依赖项注入System.Web.Http.AuthorizeAttribute子类?,c#,asp.net-web-api,dependency-injection,unity-container,asp.net-web-api2,C#,Asp.net Web Api,Dependency Injection,Unity Container,Asp.net Web Api2,我正在开发一个使用web API 2和Unity的ASP.NET web应用程序。我们已经用内置的子类修饰了控制器/控制器方法,以便为Web API公开的各种REST端点应用授权 我们希望能够使用Unity将依赖项注入到该属性中。我已经做了相当多的搜索,但大多数示例与我的用例相差太大,没有什么用处 如何使用Unity将依赖项注入System.Web.Http.AuthorizeAttribute子类? 我已经尝试创建一个自定义FilterProvider,在属性实例上调用Unity的build方
我已经尝试创建一个自定义FilterProvider,在属性实例上调用Unity的
build
方法,但是我不确定应该扩展哪个基类或者应该实现哪个接口。您必须实现IFilterProvider。如果扩展ActionDescriptorFilterProvider,则可以调用base.GetFilters以获取在控制器和操作级别指定的筛选器
public class UnityFilterProvider : ActionDescriptorFilterProvider, IFilterProvider
{
private readonly IUnityContainer _container;
public UnityFilterProvider(IUnityContainer container)
{
_container = container;
}
public new IEnumerable<FilterInfo> GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor)
{
var attributes = base.GetFilters(configuration, actionDescriptor).ToList();
foreach (var attr in attributes)
{
_container.BuildUp(attr.Instance.GetType(), attr.Instance);
}
return attributes;
}
}
不要向属性中注入行为:我认为下面的方法不会遇到与您上面描述的相同的陷阱,因为注入也是由属性驱动的,如果要在使用之前直接实例化属性,则可以完全填充。
//Register the filter injector
var providers = config.Services.GetFilterProviders().ToList();
var defaultprovider = providers.Single(i => i is ActionDescriptorFilterProvider);
config.Services.Remove(typeof(IFilterProvider), defaultprovider);
config.Services.Add(typeof(IFilterProvider), new UnityFilterProvider(UnityConfig.Container));