2010-11-26 28 views
5

Je reçois ce qui précède lorsque j'essaie d'ouvrir une vue dans un contrôleur dans une zone. Ninject est configuré comme suit:IControllerFactory 'MyWebSite.WebUI.Infrastructure.NinjectControllerFactory' n'a pas renvoyé de contrôleur pour le nom 'Admin'

public class NinjectControllerFactory : DefaultControllerFactory 
{ 
    private IKernel kernel = new StandardKernel(new RLSBCWebSiteServices()); 

    protected override IController GetControllerInstance(RequestContext context, Type controllerType) 
    { 
     if (controllerType == null) 
      return null; 
     return (IController)kernel.Get(controllerType); 
    } 

    private class MyWebSiteServices : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<IMatchesRepository>().To<SqlMatchesRepository>().WithConstructorArgument("connectionString", 
       ConfigurationManager.ConnectionStrings["MyWebSiteDb"].ConnectionString); 
     } 
    } 
} 

Si je place un point d'arrêt dans le code, je vois le contexte de RequestContext contient les valeurs suivantes:

context.RouteData.DataTokens.Values[0] = “MyWebSite.WebUI.Areas.Visitor” context.RouteData.DataTokens.Values[1] = “Visitor” which is the Area 
context.RouteData.Values.Values[0] = “admin” which is the Controller 
context.RouteData.Values.Values[1] = “register” which is the View 

Cependant controllerType == null, à la place sur le contrôleur prénom.

Ce transfert vers la nouvelle page est déclenchée par

Html.ActionLink("here", "Register", "Admin", new { area = "Visitor" }, null) 

qui se trouve sur la page de connexion. Cependant, la même chose se produit si j'entre

http://example.com/Visitor/admin/register 

dans IE8

L'enregistrement de la zone est comme suit:

public class VisitorAreaRegistration : AreaRegistration 
{ 
    public override string AreaName { get { return "Visitor"; } } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Visitor_default", 
      "Visitor/{controller}/{action}/{id}", 
      new { controller = "Admin", action = "Register", id = UrlParameter.Optional } 
     ); 
    } 
} 

Quelqu'un at-il réussi à obtenir les zones de travail avec NinjectControllerFactory, ou est-il quelque chose de mal avec ma configuration?

Répondre

3

Au lieu de créer votre propre NinjectControllerFactory, utilisez la dernière version de Ninject.Web.Mvc. Il prend en charge les zones. Voir: https://github.com/ninject/ninject.web.mvc

+0

J'ai regardé ceci quand j'ai téléchargé Ninject en premier lieu, mais je pensais que le .dll que j'ai utilisé était la version compilée de ceci. Donc, j'ai maintenant téléchargé cette version, mais les documents sont très clairsemés. S'il y avait quelque chose que vous pourriez suggérer qui m'aiderait à mettre les choses en place? – xiecs

+0

Jetez un coup d'œil à l'exemple d'application. Cela vient avec le code source –

+0

J'ai téléchargé la source, l'ai installé et affiché avec succès le site Web de Ninject. En regardant à travers la source, c'est beaucoup plus compliqué que je ne le veux, avec Spark, Elmah, Newtonsoft etc. Beaucoup de choses sont au dessus de moi. Je remarque que vous n'utilisez pas les zones dans votre site Web. J'ai également jeté un coup d'oeil à JavascriptRouteGenerator.cs. Il semble n'y avoir rien là-dedans qui suggérerait qu'il gère les zones. J'ai fait quelques changements basés sur le code source, qui sont trop gros pour être listés ici. Je reçois toujours un message d'erreur disant qu'il ne peut pas trouver l'URL demandée. – xiecs