任何人可以指出我正确的方向让Ninject使用WCF Web API Preview 5?我已经成功地运行在我的ASP.NET MVC 3项目中,也在另一个内部WCF服务使用Ninject.Extensions.Wcf库.但是,当创建一个新的MVC 3项目并从NuGet获取WebApi.All库时,我无法使其工作.
我已经看过这个stackoverflow后Setting up Ninject with the new WCF Web API,但不能让它工作,我认为可以与最新版本的一些变化.
我也不确定哪个Ninject Libraries参考超过主要的.我使用Ninject.MVC3,Ninject.Extensions.Wcf.
对此的任何帮助将不胜感激.
****更新**
public class NinjectResourceFactory : IResourceFactory { private readonly IKernel _kernel; public NinjectResourceFactory(IKernel kernel) { _kernel = kernel; } public object GetInstance(Type serviceType,InstanceContext instanceContext,HttpRequestMessage request) { return _kernel.Get(serviceType); } public void ReleaseInstance(InstanceContext instanceContext,object service) { // no op } }
我在我的global.asax中有
var configuration = HttpConfiguration.Create().SetResourceFactory(new NinjectResourceFactory()); RouteTable.Routes.MapServiceRoute<myResource>("resource",configuration);
我遇到的问题是IResourceFactory接口不被识别,并且HttpConfiguration.Create()不再存在,所以我需要设置SetResourceFactory其他一些我试图使用HttpConfiguration().CreateInstance方法,但没有喜悦.
解决方法
以下是我的代码与Ninject和WebApi,它的工作原理.
创建一个类继承自WebApiConfiguration
创建一个类继承自WebApiConfiguration
public class NinjectWebApiConfiguration : WebApiConfiguration { private IKernel kernel = new StandardKernel(); public NinjectWebApiConfiguration() { AddBindings(); CreateInstance = (serviceType,context,request) => kernel.Get(serviceType); } private void AddBindings() { kernel.Bind<IProductRepository>().To<MockProductRepository>(); } }
并在RegisterRoutes中使用NinjectWebApiConfiguration
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); var config = new NinjectWebApiConfiguration() { EnableTestClient = true }; routes.MapServiceRoute<ContactsApi>("api/contacts",config); }