无法使用Unity引导程序为ASP.NET Web API nuget包注入System.Web.Http.Filters.ActionFilterAttribute
我无法使用Unity Web API API nuget包的Unity引导程序使用自定义ActionFilterAttribute类进行dependency injection。
我在UnityConfig中注册了这个类型,我在其他地方使用它(虽然使用构造函数注入)但它工作正常。
public static void RegisterTypes(IUnityContainer container) { container.RegisterType(); ... }
代码被成功调用,但实例化对象(settingService)为null。
public class APIKeyValidationAttribute : ActionFilterAttribute { [Dependency] public ISettingService settingService { get; set; } public override void OnActionExecuting(HttpActionContext actionContext) { ... if (settingService == null) { throw new Exception("settingService is null"); } ... }
为了让这个工作,我需要做什么? 我已经搜索了很长时间,只能找到MVC或具有不同dependency injection器的Web API的示例。
首先创建一个IFilterProvider
,它将执行BuildUp并注入依赖项:
public class UnityActionFilterProvider : ActionDescriptorFilterProvider, IFilterProvider { private readonly IUnityContainer container; public UnityActionFilterProvider(IUnityContainer container) { this.container = container; } public new IEnumerable GetFilters( HttpConfiguration configuration, HttpActionDescriptor actionDescriptor) { var filters = base.GetFilters(configuration, actionDescriptor); foreach (var filter in filters) { container.BuildUp(filter.Instance.GetType(), filter.Instance); } return filters; } }
然后注册IFilterProvider:
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); }
我把这个方法放在UnityWebApiActivator
类中调用它。
上述就是C#学习教程:无法使用Unity引导程序为ASP.NET Web API nuget包注入System.Web.Http.Filters.ActionFilterAttribute分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1016765.html