无法在web api控制器中解析与Unity.AspNet.Mvc的依赖关系

问题描述 投票:0回答:1

我正在使用Asp.Net MVC 5,我正在尝试连接web api控制器的依赖关系,但它不起作用,并说控制器需要一个参数较少的构造函数。

我已经将unity容器更新为v4,这意味着更新其他一些引用,即unity.abstractions也是v4。

我使用unity.mvc而不是unity.mvc5。

在UnityConfig我有

public static class UnityConfig
{
    private static readonly Lazy<IUnityContainer> Container = new Lazy<IUnityContainer>(InitialiseContainer, LazyThreadSafetyMode.ExecutionAndPublication); 

    public static IUnityContainer ConfiguredContainer()
    {
        return Container.Value;
    }

    private static IUnityContainer InitialiseContainer()
    {
        var container = new UnityContainer();        

        //DependencyResolver.SetResolver(new Unity.Mvc5.UnityDependencyResolver(container));
        //GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);                                             

        // Auth
        container.RegisterType<IAuthenticationManager>(new InjectionFactory(c => HttpContext.Current.GetOwinContext().Authentication));            
        container.RegisterType<ApplicationUserManager>(new InjectionFactory(c => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>()));
        container.RegisterType<IUserStore<LiApplicationUser>> (new InjectionFactory(c => new UserStore<LiApplicationUser>(new ApplicationIdentityDbContext())));
        // Repository
        container.RegisterType<LeisureInsureEntities>(new InjectionFactory(c => ContextFactory.Context()));
        container.RegisterType<ICar, Volvo>();

        DependencyResolver.SetResolver(new UnityDependencyResolver(container));

        return container;
    }       
}

我评论出不再需要unity.mvc5代码,所以将其删除。这似乎需要unity.abstractions v2,并且不接受4。

当我试图注入webapi控制器时,我还需要Unity.WebAPI吗?它提供了与Unity.Mvc5相同的问题并由同一个人开发,即它不喜欢我以后的unity.abstractions版本。

在我的web api控制器中,我看到我是否可以将沃尔沃连接作为测试

public class StripeController : ApiController
{               

    private readonly IEndpointInstance _endpoint;
    private readonly ICar car;

    //public StripeController(IEndpointInstance endpoint)
    //{
    //    _endpoint = endpoint;
    //}        

    public StripeController(ICar newcar)
    {
        car = newcar;
    }

谢谢

dependency-injection asp.net-mvc-5 unity-container
1个回答
1
投票

您将需要Unity.AspNet.WebApi适配器来配置您的ApiControllers。

小心你不要混淆包裹。其中一些不是由同一项目所有者(Unity.Mvc5,Unity.WebAPI)。我没有使用过这些,所以我不能评论它的适用性。

我有一个例子https://github.com/jasenhk/MovieStar从另一个answer使用Unity v5.10和Unity.MVC以及Unity.AspNet.WebApi

这是packages.config

<package id="Unity" version="5.10.2" targetFramework="net461" />
<package id="Unity.Abstractions" version="4.1.2" targetFramework="net461" />
<package id="Unity.AspNet.WebApi" version="5.10.0" targetFramework="net461" />
<package id="Unity.Container" version="5.10.2" targetFramework="net461" />
<package id="Unity.Mvc" version="5.10.0" targetFramework="net461" />
© www.soinside.com 2019 - 2024. All rights reserved.