Невозможно разрешить зависимости с Unity.AspNet.Mvc в контроллере webapi - PullRequest
0 голосов
/ 01 апреля 2019

Я использую Asp.Net MVC 5 и пытаюсь подключить свои зависимости для контроллера веб-API, но он не работает и говорит, что контроллеру нужен конструктор без параметров.

Я обновил контейнер единиц до 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.

В моем контроллере webapi я вижу, могу ли я подключить Volvo в качестве теста

public class StripeController : ApiController
{               

    private readonly IEndpointInstance _endpoint;
    private readonly ICar car;

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

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

Спасибо

1 Ответ

1 голос
/ 02 апреля 2019

Вам потребуется адаптер Unity.AspNet.WebApi для настройки ваших ApiControllers.

Осторожно, вы не перепутайте пакеты. Некоторые из них не принадлежат одному и тому же владельцу проекта (Unity.Mvc5, Unity.WebAPI). Я не использовал их, поэтому не могу комментировать его пригодность.

У меня есть пример https://github.com/jasenhk/MovieStar от другого ответа , который использует Unity v5.10 и Unity.MVC , а также Unity.AspNet.WebApi .

Вот пакеты.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" />
...