Использование ninject dependecyResolver для MVC и WebAPI

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

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

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

// 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;

2 ответов


существует способ разделить один и тот же контейнер между 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());
       }
   }

проверьте эту статью для решения: простой способ поделиться Разрешителями зависимостей между MVC и Web API


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

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

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