2010-02-11 11 views
6

sto usando: -In che modo ottengo il funzionamento di novject 2.0 con asp.net mvc 2?

  1. asp.net MVC RC 2
  2. Ninject e Ninject asp.net mvc estensione (http://github.com/enkari/ninject.web.mvc)

continuo a ricevere il 'No costruttore senza parametri definiti per questo oggetto.' per il mio AccountController. AccountController viene iniettato con Servizi. I collegamenti per questi servizi sono definiti nel ServiceModule.

Trova di seguito il codice per la mia MvcApplication in Global.asax.cs.

public class MvcApplication : NinjectHttpApplication // System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Account", action = "Login", id = "" } // Parameter defaults 
     ); 

    } 

    protected override void OnApplicationStarted() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterRoutes(RouteTable.Routes); 

     RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    } 

    protected override IKernel CreateKernel() 
    { 
     return new StandardKernel(new INinjectModule[] { 
      new ServiceModule(), 
     }); 
    } 
} 
+0

sono altri controllori di lavoro? Hai costruito il progetto Ninject.Web.Mvc contro ASP.NET MVC 2 RC 2? – Charlino

+0

@Charlino. Grazie, ha funzionato –

risposta

7

La ricostruzione di Ninject.Web.Mvc contro le DLL di ASP.Net MVC 2 ha risolto il problema. Il problema è con la classe NinjectControllerFactory. La firma del metodo per ottenere l'istanza di controllo è cambiata in MVC 2.

IController GetControllerInstance(Type controllerType) 

Per

IController GetControllerInstance(
     RequestContext requestContext, Type controllerType) 

apportare le modifiche necessarie e ricostruire l'estensione Ninject MVC e tutto funziona bene. Grazie a @Charlino per il suggerimento.

+1

Buono a sapersi. Eviscerato non ho fatto una risposta e ottenere i punti! ;-) – Charlino

-1

In Ninject, non è necessario sovrascrivere il metodo Application_Start. Se hai bisogno di cose che non sono automaticamente (come le aree di registrazione - non so in cima alla mia testa se Ninject lo fa anche per te), assicurati di chiamare base.OnApplicationStarted() per far girare tutte le cose specifiche di Ninject propriamente.

protected override void OnApplicationStarted() 
{ 
    base.OnApplicationStarted(); 

    // Kick some butt here 
} 
+0

Da quello che vedo nel file "NinjectHttpApplication.cs", la funzione è vuota. Sono d'accordo che dovrei farlo nel modo in cui hai detto (perché è virtuale), ma questo non risolve il mio problema. –

-1

Il codice sembra corretto tranne per la virgola dopo "new ServiceModule()".

Dovrebbe essere in Global.asax.cs, non in Global.aspx.cs.

+0

Modificato il nome del file nella domanda. E 'stato un errore di battitura. La virgola non ha importanza. sta scrivendo la sintassi. –

1

Per qualsiasi ragione, ho trovato che se il tuo global.asax.cs eredita da NinjectHttpApplication OnApplicationStarted() non viene chiamato. Cambia OnApplicationStarted() per sovrascrivere Init(), e dovrebbe funzionare.

vedere qui sotto:

public class MvcApplication : NinjectHttpApplication // System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Account", action = "Login", id = "" } // Parameter defaults 
     ); 

    } 

    public override void Init() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterRoutes(RouteTable.Routes); 

     RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    } 

    protected override IKernel CreateKernel() 
    { 
     return new StandardKernel(new INinjectModule[] { 
      new ServiceModule(), 
     }); 
    } 
} 
Problemi correlati