2012-03-19 3 views
0

J'essaye de construire une contrainte qui vérifie la base de données. Et j'utilise Ninject, mais pour une raison quelconque, il ne crée pas une nouvelle instance de mon référentiel quand il se déclenche.Routeconstraint avec Ninject et dbcontext

Global.asax.cs

// Content 
routes.MapRoute(
     "Content Language Route", 
     "{languageID}/List", 
      new { controller = "Content", action = "Index", 
      new { languageID = new LanguageRouteConstraint() }, 
      new string[] { "MyProj.MVC.Controllers" } 
     ); 
..... 
kernel.Bind<IContentRepository>().To<ContentRepository>(); 

Constraint

public class LanguageRouteConstraint : IRouteConstraint 
{ 
#region IRouteConstraint Members 

private readonly IContentRepository _contentRepository; 

public LanguageRouteConstraint(IContentRepository contentRepository) 
{ 
    this._contentRepository = contentRepository; 
} 

public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
{ 
if (routeDirection == RouteDirection.IncomingRequest) 
{ 
    string languageID = values["languageID"].ToString(); 

    if (String.IsNullOrEmpty(languageID)) 
    return false; 

    MyProj.MVC.Models.Language language = _contentRepository.GetLanguage(languageID); 

    return (language != null); 
    } 
    return false; 
    }  
#endregion 
} 

En utilisant Ninject pour le dépôt travaille dans le contrôleur, mais dois-je modifier l'itinéraire en Gobal asa pour lui pour le rendre travail?

Répondre

0

a résolu le problème comme celui-ci:

// Content 
routes.MapRoute("Content Language Route", 
     "{languageID}/List", 
     new { controller = "Content", action = "Index", 
     new 
     { 
     languageID = new LanguageRouteConstraint(
      DependencyResolver.Current.GetService<IContentRepository>()) 
     }, 
    new string[] { "MyProj.MVC.Controllers" } 
); 
Questions connexes