Asp.net mvc 4 对MVC和WebAPI使用ninject dependecyResolver
我已经创建了一个MVC4 web应用程序,并决定在这个应用程序中使用web api。 我正在为MVC web应用程序使用ninject依赖项解析器。现在我想使用这个用于web api的ninject依赖项解析器。 但是这里出现的问题是:使用System.Web.mvcAsp.net mvc 4 对MVC和WebAPI使用ninject dependecyResolver,asp.net-mvc-4,asp.net-web-api,ninject,dependency-resolver,Asp.net Mvc 4,Asp.net Web Api,Ninject,Dependency Resolver,我已经创建了一个MVC4 web应用程序,并决定在这个应用程序中使用web api。 我正在为MVC web应用程序使用ninject依赖项解析器。现在我想使用这个用于web api的ninject依赖项解析器。 但是这里出现的问题是:使用System.Web.mvc web api IDependencyResolver使用System.web.Http.Dependencies 那么我该如何解决这个问题呢 最后,我想要这样的东西: // Use the container and the N
web api IDependencyResolver使用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;
有一种方法可以在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());
}
}
查看本文以了解解决方案:
有一个NuGet包可以实现这一点。将NInject、NInject.Web.Common、NInject.MVCx和WebApiContrib.IoC.NInject NuGet包添加到项目中。应在App_Start文件夹中创建NInjectWebCommon类。将依赖项的绑定添加到RegisterServices方法。在RegisterServices(内核)调用之后的CreateKernel方法中,添加以下行:
GlobalConfiguration.Configuration.DependencyResolver = new NinjectResolver(kernel);
这将允许您创建Ninject依赖项解析器,而无需创建自己的覆盖类。很简单,对吗?Web API依赖项解析程序与MVC依赖项解析程序是完全不同的接口。您必须为Web API创建另一个类。我认为应该有一种方法,一种模式。像适配器之类的东西。因为他们的界面中有一些常用的方法!解决方案很简单,创建一个实现System.Web.Mvc.IDependencyResolver
和System.Web.Http.IDependencyResolver
接口的类。相关/重复:我相信它是NinjectDependencyResolver(内核),而不是NinjectResolver,这篇博文对您的方法进行了扩展。