简体   繁体   English

无法使用Unity引导程序为ASP.NET Web API nuget包注入System.Web.Http.Filters.ActionFilterAttribute

[英]Can't inject on System.Web.Http.Filters.ActionFilterAttribute using Unity bootstrapper for ASP.NET Web API nuget package

I can't get dependency injection working with a custom ActionFilterAttribute class using the Unity bootstrapper for ASP.NET Web API nuget package. 我无法使用Unity Web API API nuget包的Unity引导程序使用自定义ActionFilterAttribute类进行依赖注入。

I've registered the type in UnityConfig and I'm using it elsewhere (using constructor injection there though) and it works fine. 我在UnityConfig中注册了这个类型,我在其他地方使用它(尽管使用构造函数注入),它工作正常。

public static void RegisterTypes(IUnityContainer container)
{
    container.RegisterType<ISettingService, SettingService>();
    ...
}

The code is being called successfully, however the instantiated object (settingService) is null. 代码被成功调用,但实例化对象(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");
    }
    ...
}

What do I need to do to get this working? 为了让这个工作,我需要做什么? I've been searching for a long time and can only find examples for MVC or for Web API with different dependency injectors. 我已经搜索了很长时间,只能找到MVC或具有不同依赖注入器的Web API的示例。

First create an IFilterProvider that will perform a BuildUp and inject the dependencies: 首先创建一个IFilterProvider ,它将执行BuildUp并注入依赖项:

public class UnityActionFilterProvider 
    : ActionDescriptorFilterProvider, IFilterProvider
{
    private readonly IUnityContainer container;

    public UnityActionFilterProvider(IUnityContainer container)
    {
        this.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.GetType(), filter.Instance);
        }

        return filters;
    }
}

Then register the IFilterProvider: 然后注册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);
}

I put this method and invoked it in the UnityWebApiActivator class. 我把这个方法放在UnityWebApiActivator类中调用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 System.Web.Http.Filters.ActionFilterAttribute必须与控制器位于同一个项目中? - System.Web.Http.Filters.ActionFilterAttribute must be in same project as controller? WebApi,Autofac,System.Web.Http.Filters.ActionFilterAttribute每个请求的实例 - WebApi, Autofac, System.Web.Http.Filters.ActionFilterAttribute Instance Per Request 如何使用Unity基于http请求参数动态地将服务注入到asp.net web api控制器中 - How to dynamically inject service into asp.net web api controller based on http request parameter using Unity 为什么我的ASP.NET Web API ActionFilterAttribute OnActionExecuting无法启动? - Why is my ASP.NET Web API ActionFilterAttribute OnActionExecuting not firing? 无法使用Unity将依赖项注入ASP.NET Web API控制器 - Cannot Inject Dependencies into ASP.NET Web API Controller using Unity ASP.NET Web API项目中的System.Data.Common,System.Net.Http框架与Nuget程序集 - System.Data.Common, System.Net.Http Framework vs Nuget assembly in ASP.NET Web API project 带ActionFilterAttribute扩展的Throttle ASP.NET Web Api - Throttle ASP.NET Web Api with ActionFilterAttribute extension Asp.net Web API筛选器优先级 - Asp.net Web API Filters priority ASP.NET Web应用程序(带有ascx WebUserControl)作为NuGet包 - ASP.NET Web Application (w/ ascx WebUserControl) as NuGet Package 什么是Microsoft ASP.NET网页2数据Nuget包? - What is the Microsoft ASP.NET Web Pages 2 Data Nuget Package for?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM