Csharp/C#教程:无法使用Unity引导程序为ASP.NET Web API nuget包注入System.Web.Http.Filters.ActionFilterAttribute分享


无法使用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

(0)
上一篇 2021年12月31日
下一篇 2021年12月31日

精彩推荐