2014-11-25 13 views
7

è possibile iniettare dipendenze nella classe WebApiConfig utilizzando Ninject?Iniezione di dipendenze di Ninject in WebApiConfig in Web API 2

Questa è la mia classe 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*)); 
      } 
     } 

E questa è la mia dichiarazione 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 
     } 
    } 

risposta

3

Alla fine non ho avuto a che fare questo, ma ho creato un post sul blog su come fare questo here

+0

grazie questo post mi ha aiutato, ma penso che alcuni abbiano già questa classe di NinjectWebCommon se stanno aggiungendo WebAPI a un progetto MVC esistente. Ho scoperto che la seguente riga era tutto ciò di cui avevo bisogno di aggiungere: 'GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver (_kernel);' dopo la chiamata 'RegisterServices (_kernel)' nel metodo 'CreateKernel'. Si noti che questo è il 'NinjectDependencyResolver' dallo spazio dei nomi' Ninject.Web.WebApi' (potrebbe essere necessario scaricare il pacchetto NuGet separato). Grazie! – Jordan

+0

Sto ancora cercando di capire come farlo. La mia classe NinjectWebCommon contiene già quella linea, tuttavia anche io ho una proprietà decorata con l'attributo [Inject], la dipendenza non viene iniettata. qualche idea? –

+0

Hai spostato il tuo blog? Sembra che non sia più disponibile. –

Problemi correlati