2014-11-25 79 views
7

是否可以使用Ninject将依赖关系注入到WebApiConfig类中?在Web API中向WebApiConfig注入Ninject依赖关系2

这是我的WebApiConfig类。

 public static class WebApiConfig 
     { 
      public static void Register(HttpConfiguration config) 
      { 
       // Web API routes 
       config.MapHttpAttributeRoutes(); 

       config.Routes.MapHttpRoute(
        name: "DefaultApi", 
        routeTemplate: "api/{controller}/{id}", 
        defaults: new { id = RouteParameter.Optional } 
       ); 

       config.Services.Replace(typeof(IExceptionHandler), new ErrorHandlerMessageHandler(*NEEDS DEPENDENCY*)); 
      } 
     } 

这是我NinjectHttpApplication声明

public class WebApiApplication : NinjectHttpApplication 
    { 
     protected override void OnApplicationStarted() 
     { 
      base.OnApplicationStarted(); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
     } 

     protected override IKernel CreateKernel() 
     { 
      var kernel = new StandardKernel(); 
      RegisterServices(kernel); 

      GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel); 
      return kernel; 
     } 

     private void RegisterServices(IKernel kernel) 
     { 
      //bindings 
     } 
    } 

回答

3

最终我没有这样做,但我已经创建了如何做到这一点here

+0

感谢这个帖子博客文章帮助了我,但是我认为如果他们将WebAPI添加到现有的MVC项目中,一些人会拥有这个NinjectWebCommon类。我发现下面这行是我需要添加的:'GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(_kernel);'在'CreateKernel'方法中'RegisterServices(_kernel)'调用之后。请注意,这是Ninject.Web.WebApi命名空间中的'NinjectDependencyResolver'(可能需要下载单独的NuGet包)。谢谢! – Jordan 2015-10-02 13:24:25

+0

我仍在试图弄清楚如何做到这一点。我的NinjectWebCommon类已经包含该行,但是即使我有一个用[Inject]属性装饰的属性,依赖关系也没有被注入。有什么想法吗? – 2017-08-01 15:56:34

+0

您是否移动了您的博客?似乎它不再可用。 – 2017-08-01 15:57:29