8

Я создал веб-приложение MVC 4 и решил использовать web api в этом приложении. Я использую преобразователь зависимости ninject для веб-приложения MVC. и теперь я хочу использовать этот преобразователь зависимости ninject для web api. но проблема рейза здесь MVC IDependencyResolver пространства имен: using System.Web.Mvc и веб-апи IDependencyResolver является using System.Web.Http.DependenciesИспользование ninject dependecyResolver для MVC и WebAPI

так, как я могу решить эту проблему?

, наконец, я хочу что-то вроде этого:

// Use the container and the NinjectDependencyResolver as 
     // application's resolver 
     var resolver = new NinjectDependencyResolver(container); 

     //Register Resolver for MVC 
     DependencyResolver.SetResolver(resolver); 

     //Register Resolver for Web Api 
     GlobalConfiguration.Configuration.DependencyResolver = resolver; 
+1

Преобразователь зависимостей Web API - это совершенно другой интерфейс, чем преобразователь зависимостей для MVC. Вам нужно будет создать другой класс для веб-API. – Steven

+0

Я думаю, что должен быть путь, pattrn. некоторые вещи как адаптер. потому что у них есть некоторый общий метод в их интерфейсе! –

+0

Решение прост, создайте класс, который реализует интерфейс 'System.Web.Mvc.IDependencyResolver' и' System.Web.Http.IDependencyResolver'. – Steven

ответ

13

Там есть способ разделить тот же контейнер между MVC и ASP.NET Web API. Вам просто нужно реализовать оба интерфейса.

public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver, System.Web.Mvc.IDependencyResolver 
    { 
     private readonly IKernel kernel; 

     public NinjectDependencyResolver(IKernel kernel) 
      : base(kernel) 
     { 
      this.kernel = kernel; 
     } 

     public IDependencyScope BeginScope() 
     { 
      return new NinjectDependencyScope(this.kernel.BeginBlock()); 
     } 
    } 

Проверить эту статью для решения: Simple Way to share Dependency Resolvers between MVC and Web API

3

Существует пакет NuGet, который делает это. Добавьте в проект пакеты NInject, NInject.Web.Common, NInject.MVCx и WebApiContrib.IoC.Ninject NuGet. Класс NInjectWebCommon должен быть создан в папке App_Start. Добавьте привязку для своих зависимостей к методу RegisterServices. В методе CreateKernel после вызова RegisterServices (ядро), добавьте следующую строку:

GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel); 

Это позволит вам создать распознаватель зависимости Ninject без того, чтобы создать свой собственный класс перенастройки. Легко, правда?

+2

Я считаю, что это NinjectDependencyResolver (ядро), а не NinjectResolver, это сообщение в блоге расширяется на ваш подход. http://nodogmablog.bryanhogan.net/2016/04/web-api-2-and-ninject-how-to-make-them-work-together/ – raterus