Использование 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. Полегче, Да?