HttpConfiguration.get_ServiceResolver()缺少

我正在使用MVC4连接Ninject并让它正在努力实际解决依赖关系。 但是,我得到以下exception:

找不到方法:’System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()’。

有没有人碰到这个并且有工作?

GlobalConfiguration.Configuration.ServiceResolver已替换为RC中的GlobalConfiguration.Configuration.DependencyResolver 。 所以我猜你使用的Ninject软件包并不是专为RC设计的。 这是一个突破性的变化。

以下是使Ninject与ASP.NET MVC 4 Web API RC一起工作的步骤:

  1. 使用Empty模板创建一个新的ASP.NET MVC 4应用程序
  2. 声明一个接口:

     public interface IFoo { string GetBar(); } 
  3. 然后是一个实现:

     public class Foo : IFoo { public string GetBar() { return "the bar"; } } 
  4. 然后添加一个API控制器:

     public class ValuesController : ApiController { private readonly IFoo _foo; public ValuesController(IFoo foo) { _foo = foo; } public string Get() { return _foo.GetBar(); } } 
  5. 安装Ninject.Mvc3 NuGet包( Install-Package Ninject.Mvc3

  6. 定义一个自定义API依赖关系解析器,如下所示:

     public class NinjectDependencyScope : IDependencyScope { private IResolutionRoot resolver; internal NinjectDependencyScope(IResolutionRoot resolver) { Contract.Assert(resolver != null); this.resolver = resolver; } public void Dispose() { IDisposable disposable = resolver as IDisposable; if (disposable != null) disposable.Dispose(); resolver = null; } public object GetService(Type serviceType) { if (resolver == null) throw new ObjectDisposedException("this", "This scope has already been disposed"); return resolver.TryGet(serviceType); } public IEnumerable GetServices(Type serviceType) { if (resolver == null) throw new ObjectDisposedException("this", "This scope has already been disposed"); return resolver.GetAll(serviceType); } } public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver { private IKernel kernel; public NinjectDependencyResolver(IKernel kernel) : base(kernel) { this.kernel = kernel; } public IDependencyScope BeginScope() { return new NinjectDependencyScope(kernel.BeginBlock()); } } 
  7. 在安装NuGet时创建的~/App_Start/NinjectWebCommon.cs/CreateKernel方法中,在RegisterServices(kernel);之后添加以下行RegisterServices(kernel); 线:

     GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); 
  8. 配置你的内核:

     private static void RegisterServices(IKernel kernel) { kernel.Bind().To(); } 
  9. 点击F5并导航到/api/values

  10. 你会the bar

显然当RC点击RTM时,我希望会有一个Ninject.Mvc4 NuGet将这10个步骤缩短到最多5个。