我创建了MVC 4 Web应用程序并决定在此应用程序中使用web api。
我正在为MVC Web应用程序使用ninject依赖解析器。现在我想对web api使用这个ninject依赖解析器。
但是这里提出的问题mvc IDependencyResolver命名空间是:using System.Web.Mvc
和web 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;
答案 0 :(得分:14)
有一种方法可以在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
答案 1 :(得分:3)
有一个NuGet包可以做到这一点。将NInject,NInject.Web.Common,NInject.MVCx和WebApiContrib.IoC.Ninject NuGet包添加到项目中。应该已在App_Start文件夹中创建NInjectWebCommon类。将依赖项的绑定添加到RegisterServices方法。在RegisterServices(内核)调用之后的CreateKernel方法中,添加以下行:
GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel);
这将允许您创建Ninject依赖项解析程序,而无需创建自己的覆盖类。容易,对吧?